一,在AppDelegate.m中写入以下代码:app
- (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;
}
二,运行,得出以下输出。ide
2015-07-14 21:44:57.889 ARC不要向已经释放的对象发送消息[2245:90589] 1
2015-07-14 21:44:57.890 ARC不要向已经释放的对象发送消息[2245:90589] 1
三,结果分析。spa
1,引用计数的内存回收方式是“只作标记,并不抹除相关数据”。有点像是移动硬盘中删除数据的时候,只是删除数据,而这些数据并无真正在移动硬盘上进行删除。code
2,上面的代码中obect对象释放以后,引用对象并不老是1,有时候也会出现程序崩溃的状况。当object对象所占的内存被复用的时候,就会出现程序崩溃的状况。对象
3,“不要向已经释放的对象发送消息”。例子是中是向已经释放的object发送retainCount消息。blog
4,当一个对象经过release内存被回收以后,向这个对象发送任何消息,无论输出结果是对,是错,都是无效的。即便和预期的同样,也只是恰巧碰上了。内存
参考资料:开发
《iOS开发进阶》 --唐巧it