iOS Developer

GeekBand-OC中的ARC

2016-03-08  本文已影响72人  swuzjb

自动引用计数(Automatic Reference Counting)是Objective-C默认的内存管理机制,其针对堆上的对象,由编译器自动生成操作引用计数的指令(retain或release),来管理对象的创建与释放。

哪些对象受ARC管理

哪些对象不受ARC管理

ARC的操作规范或过程

  1. 新创建(new alloc copy)一个引用类型对象,引用计数为1
    NSObject obj = [NSObject alloc];
  2. 如下操作会使引用计数加1(即retain操作):
    //1.将对引用赋值给其它变量、常量、属性、实例常量
    NSObject obj2 = obj;
    //2.将对象加入集合中
    NSSet set;
    [set addObject:obj];
    //3.将对象传递给函数参数,或者返回值
    void draw(BLNPoint *p){
    NSLog(@"[%ld, %ld]",(long)p.x, (long)p.y)
    }
  3. 对象引用计数减1——release操作:
    //1.将变量赋值为nil或其它值
    obj = nil;
    //2.属性或实例变量所在的对象被释放、或赋为其它值
    //3.参数或局部变量离开函数
    //4.将对象从集合中删除
    [array removeObjectAtIndex:0];
  4. 引用计数变为0时,内存自动被释放。

自动释放池

当引用计数变为0时,对象会触发release事件,使内存立即释放。但是如果频繁对对象进行release,可能会造成琐碎的内存管理负担。autorelease可以将release的调用延迟到自动释放池被释放时。

  void poolDemo(){
       @autoreleasepool {
            for (int i = 0; i < 10; i++) {
              __unused  BLNRectangle *rect = [[BLNRectangle alloc]init];
        }
      }
   }

什么时候需要手工管理自动释放池

上一篇 下一篇

猜你喜欢

热点阅读