Pwn*_*ner 4 pointers properties objective-c
我有一个声明如下的函数:
- (void)loadWithCompletion:(MyCompletion)completion error:(NSError**)error;
Run Code Online (Sandbox Code Playgroud)
该函数采用指向NSError的双指针,因此我可以向调用者报告错误.完成(可能是错误)将在调用函数后的某个时间发生.我需要将NSError**存储为属性,以便在上述时间过后我可以使用它.
@property(nonatomic, assign) NSError** error;
Run Code Online (Sandbox Code Playgroud)
此属性声明给出了错误:
指向非const类型NSError*的指针,没有明确的所有权.
添加__autoreleasing
之间**
,给予NSError*__autoreleasing* error
在Xcode 5.1中,默认情况下启用ARC警告"输出参数上的隐式所有权类型"(以前它已关闭).因此,对于5.1,当没有指定的所有权时,此警告开始出现.
编译器假设你想要自动释放,这通常是正确的,但作者最好考虑它并指定真正想要的东西.
通常,您希望输出参数是自动释放的,类似于函数结果.调用者将获得一个自动释放的对象,如果他们想要保留所有权,则需要将其存储在强变量中.
归档时间: |
|
查看次数: |
554 次 |
最近记录: |