1.空指针
没有存储任何内存地址的指针就是空指针(null指针)
空指针就是被赋值为nil的指针,在没有被初始化之前为nil
2.野指针
野指针不是”nil”指针,是指向”垃圾内存"的指针(不可用内存)
野指针在程序运行时很危险
3.当野指针访问已经释放的对象时程序会崩溃
举例:
1)Person *p= [Person alloc]init];//创建person对象
2)[p setValue:10 forKey:@”age”];//给对象中age属性赋值
3)[p release];//给对象发送消息,释放对象
4)[p setValue : “child” forKey:@“name”];//程序崩溃
原因:3)后Person的对象内存已经被释放,但此时p仍然保存之前的地址,此时继续访问对象内存会导致程序崩溃.
解决办法:
1)Person *p= [Person alloc]init];//创建person对象
2)[p setValue:10 forKey:@”age”];//给对象中age属性赋值
3)[p release];//给对象发送消息,释放对象
4)p = nil;//此时p变成了空指针 不指向任何内存
4)[p setValue : “child” forKey:@“name”];//此时相当于给nil发送消息程序不会报错 输出p.name = 0 但java,c/c++中程序也会报错
4.由此也可以得出:在Objective-C中向nil发送消息是完全有效的——只是在运行时不会有任何作用.