野指针与空指针的几个问题

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发送消息是完全有效的——只是在运行时不会有任何作用.

你可能感兴趣的:(野指针与空指针的几个问题)