ARC中_autoreleasing
来源:互联网 发布:unity3d 动态生成模型 编辑:程序博客网 时间:2024/05/17 22:08
在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中的对象。
- ARC中_autoreleasing
- ARC工程中支持ARC,ARC工程那些不支持ARC
- ARC工程中添加非ARC文件
- iOS中ARC和非ARC混用
- 在ARC中使用非ARC类库
- ARC工程中添加非ARC文件
- 非ARC中添加ARC的设置
- ARC 中注意事项
- iOS中ARC混编
- XCode中ARC
- OC中ARC学习
- ARC 中 Strong,Weak
- ARC中__autoreleasing
- ARC工程中添加非ARC文件,或者非ARC环境中添加ARC文件
- Xcode非ARC项目转ARC,ARC项目中支持非ARC也就是共存
- iOS中如何关闭ARC
- ios 开发中什么是ARC
- IOS中arc的基础知识
- 使用过滤器格式化数据
- 打JAR包 路径不是根目录的问题
- 数据结构-2
- session共享
- 精确记算程序的运行时间或者某段代码的运行时间
- ARC中_autoreleasing
- 项目----1(在项目开发中AsyncTask与Activity生命周期不一导致内存泄露的问题)
- 如何实现一个malloc
- panel的content属性
- 【CSS3】结构性伪类选择器—not
- xcode 导入七牛 objc-sdk
- Caused by: java.lang.ClassCastException: org.hibernate.type.StringType cannot be cast to org.hiberna
- 前端开发
- java中线程同步