ios-__autoreleasing修饰符
来源:互联网 发布:销售pipeline数据 编辑:程序博客网 时间:2024/06/07 00:22
最近看到有些方法中里面要求传入的参数的是需要传入__autoreleasing修饰符的,搜罗了一些资料,这里做下记录
就比如说下面的这个方法就要求我们传入的参数类型是NSError *__autoreleasing *
这里需要注意的是如果我们之前定义的是NSError * error,编译器会帮我们隐式的去做NSError *__autoreleasing tempError = error;这么一个操作,然后据说还会做以下的操作
也就是说先前我们是直接把&error传进去的,这里编译器帮我们做了一个替换。所以如果我们为了提高点效率,反正编译器都会进行转换,那还不如我们自己去写上好了,这样好比较好,编译器去找和替换肯定也是需要时间的。所以我们最好都定义成NSError *__autoreleasing error;
NSData * data; NSError * error; NSError *__autoreleasing tempError = error; // 编译器添加 if (![data writeToFile:@" " options:NSDataWritingAtomic error:&tempError]) { error = tempError; // 编译器添加 NSLog(@"Error: %@", error); }加上了__autoreleasing,相当于就是在创建这个变量的时候会在后面加了一个autorelease操作,还有就是在ARC中如果像这种NSxxxx ** 类型的如果不加修饰符,编译器会默认的将其加上__autoreleasing修饰符。
还有就是有的时候需要注意的是可能我们在使用容器的block版本的枚举器的时候,系统会自动添加一个autoreleasePool,如果在这个时候我们在这个block里面使用了我们定义的用__autoreleaseing修饰符的变量,那这个变量就会被释放掉,可能我们接下来想要做的操作就无法进行了。
还有需要注意的其实就是修饰符的写法正确的写法应该是
NSString * __weak str = @"hhhh";
而不是 __weak NSString * str1=@"kkkk";
这个可能就会有人问了那为什么下面的写法也可以呢?因为编译器帮我们做了处理,好像文档有这么一句话Other variants are technically incorrect but are “forgiven” by the compiler. To understand the issue
- ios-__autoreleasing修饰符
- __autoreleasing 修饰符
- __autoreleasing 修饰符
- iOS内存管理-所有权修饰符:__strong, __weak/__unsafe_unretained, __autoreleasing
- __strong、__weak、__unsafe_unretained和__autoreleasing修饰符
- ios 比较__unsafe_unretain、__strong、__weak、__autoreleasing
- iOS属性修饰符
- iOS 属性修饰符
- iOS 修饰符~NS_DESIGNATED_INITIALIZER
- iOS 修饰符~ NS_DESIGNATED_INITIALIZER
- ios属性修饰符
- iOS 高级内存管理:比较__unsafe_unretain、__strong、__weak、__autoreleasing
- iOS 高级内存管理:比较__unsafe_unretain、__strong、__weak、__autoreleasing
- iOS 高级内存管理:比较__unsafe_unretain、__strong、__weak、__autoreleasing
- IOS中的属性修饰符
- ios初步修饰符简介
- ios属性修饰符总结
- ios属性修饰符总结
- hdoj 3535 AreYouBusy(混合背包)
- XListView—Android开源项目
- 四大组件之contentProvider内容监听者
- 94. Binary Tree Inorder Traversal
- 基础算法 之 BFS & DFS
- ios-__autoreleasing修饰符
- 【其他】我整理了一个书单
- PHP操作mongo数据库
- Hadoop与Spark算法分析(三)——矩阵乘法
- 《零基础入门学习Python》学习笔记1
- Consul 是什么
- Zookeeper_神奇的动物在哪里?
- C# Image与Base64编码互转函数
- 深度学习框架TensorFlow学习与应用(三)——使用交叉熵作为代价函数