空指针和野指针

空指针:

1> 没有存储任何内存地址的指针就称为空指针(NULL指针)

2> 空指针就是被赋值为0的指针,在没有被具体初始化之前,其值为0。

例如:

Book *book=NULL;

Book *book=nil;

野指针:

"野指针"不是NULL指针,是指向"垃圾"内存(不可用内存)的指针。野指针是非常危险的。

Book *book =[[Book alloc]init];
book.price=3.5;
[book release];
[book setPrice:4];

上面代码中:

[book release];
这句代码意思:
给book指向的Book对象发送一条release消息。在这里,Book对象接收到release消息后,会马上被销毁,所占用的内存会被回收。
指针变量book仍然指向这一块内存,这时候,book就称为了野指针!

[book setPrice:4];
这句代码的意思仍然是: 给book所指向的Book对象发送一条setPrice:消息。但是在执行完上段代码后,Book对象已经被销毁了,
它所占用的内存已经是垃圾内存,如果你还去访问这一块内存,那就会报野指针错误。这块内存已经不可用了,也不属于你了,你还去访问它,肯定是不合法的。所以,这行代码报错了!

通常类似错误提示:exc_bad_access(code=1, address=0x789870)
对象释放了之后,不要尝试去调用
一般release之后可以进行赋值为nil,如:book=nil
因为book是个空指针,没有指向任何对象,因此setPrice:消息是发不出去的,不会造成任何影响。当然,肯定也不会报错。

 

posted on 2015-03-04 16:47  二狗你变了  阅读(256)  评论(0)    收藏  举报

导航