Pet*_*isu 3 cocoa cocoa-touch objective-c automatic-ref-counting
我注意到Apple函数中的这种模式会返回错误
error:(NSError *__autoreleasing *)outError
Run Code Online (Sandbox Code Playgroud)
我理解它的含义,它指向指针,用于执行结果(使用*只会改变本地复制的变量,但不会改变外部的变量)但是我关心的是
__autoreleasing
如果我把它留下怎么办?我有泄漏吗?为什么有必要?
........ ............. .........
例如,您不必__autoreleasing在定义返回对象的函数时明确指定
-(BOOL)doSomething:(NSError **)error;
Run Code Online (Sandbox Code Playgroud)
ARC编译器会自动插入__autoreleasing.这在Clang/ARC文档中有解释:
4.4.2间接参数
如果函数或方法参数的类型为T*,其中T是所有权不合格的可保留对象指针类型,则:
- 如果T是const限定的或Class,则使用__unsafe_unretained隐式限定;
- 否则,它使用__autoreleasing进行隐式限定.
Xcode代码完成也知道并显示(NSError *__autoreleasing *)error.
当调用此函数的ARC编译器还自动执行"正确的事",所以你可以叫
NSError *error;
BOOL success = [self doSomething:&error];
Run Code Online (Sandbox Code Playgroud)
如"转换到ARC发行说明"中所述,编译器会插入一个临时
__autoreleasing变量:
NSError *error;
NSError * __autoreleasing tmp = error;
BOOL success = [self doSomething:&tmp];
error = tmp;
Run Code Online (Sandbox Code Playgroud)
(有关详细信息,请参阅Clang/ARC文档中的4.3.4"通过回写传递输出参数".)
| 归档时间: |
|
| 查看次数: |
2380 次 |
| 最近记录: |