08-04、僵尸对象、野指针、空指针

08-04、僵尸对象、野指针、空指针_第1张图片
Snip20170925_44.png
Xcode中给当前项目设置监听僵尸对象报的错
08-04、僵尸对象、野指针、空指针_第2张图片
Snip20170925_46.png
Xcode中设置全局断点,可以让程序停留在报错的那行代码
08-04、僵尸对象、野指针、空指针_第3张图片
Snip20170925_47.png
杠杠func杠杠的使用
08-04、僵尸对象、野指针、空指针_第4张图片
Snip20170925_49.png
#import 
#import "Person.h"

int main(int argc, const char * argv[]) {

@autoreleasepool {
    Person *p = [[Person alloc] init]; // 1
    
    // 只要一个对象被释放了, 我们就称这个对象为 "僵尸对象"
    // 当一个指针指向一个僵尸对象, 我们就称这个指针为野指针
    // 只要给一个野指针发送消息就会报错
    [p release]; // 1-1 = 0
    // *** -[Person release]: message sent to deallocated instance 0x1001146b0

    // 空指针  nil  0
    // 为了避免给野指针发送消息会报错, 一般情况下, 当一个对象被释放后我们会将这个对象的指针设置为空指针
    // 因为在OC中给空指针发送消息是不会报错的
//        p = nil;
    
    [p release];
    [p release];
    [p release];
    [p release];
    [p release];
    [p release];
    [p release];
    
    
}
    return 0;
  }

你可能感兴趣的:(08-04、僵尸对象、野指针、空指针)