空指针和野指针
空指针:
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:消息是发不出去的,不会造成任何影响。当然,肯定也不会报错。
浙公网安备 33010602011771号