OC,MRC下给一个对象发送消息

1.MRC下给一个已经销毁的对象就会崩溃,
NSObject *object = [[NSObject alloc]init]; NSLog(@"释放前------%lu",[object retainCount]); [object release]; // 会崩溃,报错: EXC_BAD_ACCESS (code=1, address=0x3d92e8185228) NSLog(@"释放后------%lu",[object retainCount]);
2.向nil对象发送消息就没问题
NSObject *object = [[NSObject alloc]init]; NSLog(@"释放前------%lu",[object retainCount]); object = nil; NSLog(@"释放后------%lu",[object retainCount]);

注意: objc在向一个对象发送消息时,runtime库会根据对象的isa指针找到该对象实际所属的类,然后在该类中的方法列表以及其父类方法列表中寻找方法运行,然后在发送消息的时候,objc_msgSend方法不会返回值,所谓的返回内容都是具体调用时执行的。那么,如果向一个nil对象发送消息,首先在寻找对象的isa指针时就是0地址返回了,所以不会出现任何错误。

这里就要区分空指针和野指针,

野指针:已经销毁被释放的对象,指针指向的内存已经不可用,称为野指针;
野指针非常危险,所以一个好的做法是把他置为nil;
空指针:对象被赋值为nil,被称为空指针。

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

推荐阅读更多精彩内容

  • 1.ios高性能编程 (1).内层 最小的内层平均值和峰值(2).耗电量 高效的算法和数据结构(3).初始化时...
    欧辰_OSR阅读 29,665评论 8 265
  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,156评论 1 32
  • 转至元数据结尾创建: 董潇伟,最新修改于: 十二月 23, 2016 转至元数据起始第一章:isa和Class一....
    40c0490e5268阅读 1,824评论 0 9
  • OC语言基础 1.类与对象 类方法 OC的类方法只有2种:静态方法和实例方法两种 在OC中,只要方法声明在@int...
    奇异果好补阅读 4,360评论 0 11
  • 荒唐儿郎岁而立, 纵马长袭,不待漫漫时。 千里山河一剑敕,人间江湖起浮屠。 绿水青青竹妙语, 毓养流年,再煮酒一壶...
    手握瓷杯阅读 250评论 0 2