您的位置:首页 > 其它

Oc内存管理

2014-03-25 11:57 141 查看
对象的声明周期
 a 对象的初始化(alloc new copy)
 b 对象接收消息和执行操作
 c 对象被释放
   
引用计数
 a 当对象刚被创建时,初始值为1
 b 访问对象时,计数器加1(通过retain来实现)
 c 结束访问时,计数器减1 (通过release来实现)
 d 结束访问时,如采用autorelease方式,在当前自动释放池结尾会将该对象的引用计数器减1
 e 当对象计数器为0时,其他代码不再访问该对象,销毁,回收内存
eg:- (void) setEngine: (Engine *) newEngine{
           if (engine !=
newEngine) {
              [engine release];
              engine = [newEngine
retain];
              }
           }

对象的所有权:(拥有一个对象)
    •某个对象一旦拥有另外一个对象,那么这个对象要确保对其拥有的另外一个对象进行清理
•              一个对象有其他对象类型的实例变量称为拥有这些对象
               一个函数中创建了一个对象的局部变量,则称这个函数拥有这个对象
               有可能多个对象同时都拥有一个特定的对象,这种所有权更加复杂
          内存管理基本原则:  谁创建,谁释放

          

        ARC在编译期间为每个对象添加合适的retain、    release、autorelease等方法,保证每个变量的生成周期控制在合理的范围内,达到和手动管理内存同样的效果

         •使用ARC时不用关心临时变量的释放
         •__strong
        –变量声明缺省都带有__strong,对象持有者
         •__weak
        –不是对象持有者,然后对象销毁时被置为nil
         •__unsafe __unretained
        –类似__weak,但是对象销毁时不被置为nil
         •__autoreleasing
        –即当希望方法返回时对象被autoreleased,那么使用该关键字
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: