【读书笔记】ARC-不要向已经释放的对象发送消息

王朝学院·作者佚名  2016-08-27
窄屏简体版  字體: 小  |  中  |  大  |  超大  

一,在AppDelegate.m中写入如下代码:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

// Override point for customization after application launch.

NSObject *object=[[NSObject alloc]init];

NSLog(@"%ld",[object retainCount]);

[object release];

NSLog(@"%ld",[object retainCount]);

return YES;

}

二,运行,得出如下输出。

2015-07-14 21:44:57.889 ARC不要向已经释放的对象发送消息[2245:90589] 1

2015-07-14 21:44:57.890 ARC不要向已经释放的对象发送消息[2245:90589] 1

三,结果分析。

1,引用计数的内存回收方式是“只做标记,并不抹除相关数据”。有点像是移动硬盘中删除数据的时候,只是删除数据,而这些数据并没有真正在移动硬盘上进行删除。

2,上面的代码中obect对象释放之后,引用对象并不总是1,有时候也会出现程序崩溃的情况。当object对象所占的内存被复用的时候,就会出现程序崩溃的情况。

3,“不要向已经释放的对象发送消息”。例子是中是向已经释放的object发送retainCount消息。

4,当一个对象通过release内存被回收之后,向这个对象发送任何消息,不管输出结果是对,是错,都是无效的。即使和预期的一样,也只是恰巧碰上了。

参考资料:

《iOS开发进阶》 --唐巧

 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
© 2005- 王朝網路 版權所有 導航