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

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • __block和__weak修饰符的区别其实是挺明显的:1.__block不管是ARC还是MRC模式下都可以使用,...
    LZM轮回阅读 3,407评论 0 6
  • 设计模式是什么? 你知道哪些设计模式,并简要叙述? 设计模式是一种编码经验,就是用比较成熟的逻辑去处理某一种类型的...
    琦均煞Sylar阅读 435评论 0 0
  • “第996次想用小刀划开自己手腕上漂亮的动脉并阻止行动成功”,月白在心里默默地算着,想着要怎样才能拿到被自己故...
    木四少阅读 172评论 2 0
  • 模糊的秋与冬 想抱一抱 ...
    她的屋顶的鱼阅读 130评论 0 2
  • 这两天满眼抖森和霉霉在一起的八卦,对抖森完全路人的我,在看了无数篇安利抖森的文章后 ,不知羞愧的爱上了他。 但是,...
    希茜热情测试阅读 298评论 0 0