ARC中_autoreleasing

ARC中__autoreleasing

  在ARC中会自动注册到autoreleasepool中:

  1、取得非自己生成并持有的对象时(即编译器检测不是以alloc/new/copy/mutableCope开始的方法名):

  @ autoreleasepool{ id __strong obj = [NSMutableArray array]; //[NSMutableArray array]会自动注册到autoreleasepool }

  如果是alloc/new/copy/mutableCope开头的方法必须:

  @ autoreleasepool{ id __autoreleasing obj =[ [NSObject alloc] init]; }

  2、对象作为函数返回值时;

  + (id) array{ return [[NSObject alloc] init]; } //or + (id) array{ id obj = [[NSObject alloc] init]; return obj; }

  3、id的指针或对象的指针在没有显式指定时;

  - (BOOL)moveItemAtPath:(NSString *)srcPath toPath:(NSString *)dstPath error:(NSError **)error NS_AVAILABLE(10_5, 2_0);

  (NSError **)error 实际编译成 (NSError *__autoreleasing *)

  注意点:

  1、在ARC中不能使用autorelease方法,不能使用NSAutoreleasePool类;

  2、在使用附有__weak修饰符的变量时必定要使用注册到autoreleasepool中的对象;

  3、赋值给对象指针时,所有修饰符号必须一致。

  但是,例如上面的第三点,定义一个NSError __strong *error = nil,传给方法参数是不一致的,其实编译器自动的做了转化:

  NSError __strong *error = nil;

  NSError __ autoreleasing *tmp= error;

  调用方法;

  error = tmp;

  4、NSRunLoop等实现无论ARC有效还是无效,均能随时释放注册到autoreleasepool中的对象。

  5、无论ARC,都能调用非公开方法_objc_ autoreleasePoolPrint()查看注册到autoreleasepool中的对象。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值