空指针
-
没有存储任何内存地址的指针就称为空指针(NULL指针)
-
空指针就是被赋值为0的指针,在没有被具体初始化之前,其值为0。
例如:
Person * p1 = NULL;
Person * p2 = nil;
野指针
“野指针”不是NULL指针,是指向"垃圾"内存(不可用内存)的指针。人们一般不会错用NULL指针,因为用if语句很容易判断。但是“野指针”是很危险的,if语句对它不起作用。
野指针的形成:
Person * p1 = [Person alloc]init];
p.name = @"张三";
//给p指向的Person对象发送一条release消息。在这里,Person对象接收到release消息后,会马上被销毁,所占用的内存会被回收。
[p release]
//这里Person对象被销毁了,内存就变成了"垃圾内存",这时候,p就称为了野指针,如果在去对p操作,那就会报野指针错误
p.age =10;
//正确方式
p = nil;
总结:
-
利用野指针发消息是很危险的,会报错。也就是说,如果一个对象已经被回收了,就不要再去操作它,不要再尝试给它发消息。
-
利用空指针发消息是没有任何问题的,也就是说
p = nil
后在去p.age = 10
是没有错误的,如果在操作销毁内存时,一定要记得把指针内存储的内存地址滞空nill。
网友评论