野指针与僵尸对象
野指针
野指针和空指针是不一样的,空指针没有储存任何的内存地址,而野指针指向的一块内存地址,但是该内存不可用。换句话说,野指针指向的对象已经被释放了。
Person *p =[[Person alloc]init]; [p setName:@"wang"]; [p release]; //指针p指向的对象已经被释放,但是该指针还能访问该内存地址 [p setName:@"zhao"]; //所以此处不会报错
但是这是存在隐患的,这种情况下被释放掉的对象就会成为僵尸对象。僵尸对象很可能会导致代码crash。
僵尸对象
在OC中,对象被释放后所占用的内存在没有被复写(重新分配给其他对象)前称为僵尸对象,这是野指针是可以访问该内存的,因为对象的数据还在,所以程序不会报错。但是该内存一旦重新分配给其他对象就会出现问题。
xcode 选择工程名 edit scheme 里
避免野指针
很简单,在realase之后将指针指向nil即可。
p = nil;