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


    一,在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开发进阶》 --唐巧

  • 相关阅读:
    Python之从头开始建立项目流程
    Python之建立APP流程以及SVN 的使用
    python之继承
    Python之实例对象的增删改查
    Python之类属性的增删改查
    read big file
    python minus 3 days or n days
    movie
    pyqt convert ui file to py file
    pyqt4 borderless window
  • 原文地址:https://www.cnblogs.com/yang-guang-girl/p/4653429.html
Copyright © 2020-2023  润新知