让程序访问野指针
如果这样声明两个属性:
@property (nonatomic, strong) NSArray*arr1;
@property (nonatomic, unsafe_unretained) NSArray*arr2;
然后调用以下方法:
self.arr1= [@"23',@"234'];
self.arr2= self.arr1;
self.arr1= nil;
NSLog(@"arr2 = %@", self.arr2);
运行后层序会crash掉,因为self.arr2访问了野指针
为何会造成野指针呢?因为用unsafe_unretained声明的指针,由于self.arr1=nil已将内存释放掉了,但是self.arr2依然指向self.arr1的空间,然后该内存已经被释放了,所以是野指针。因而就造成crash. 所以尽量少用unsafe_unretained关键字。
网友评论