如何在Objective-C中声明双指针属性?

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*的指针,没有明确的所有权.

pro*_*rmr 8

添加__autoreleasing之间**,给予NSError*__autoreleasing* error

在Xcode 5.1中,默认情况下启用ARC警告"输出参数上的隐式所有权类型"(以前它已关闭).因此,对于5.1,当没有指定的所有权时,此警告开始出现.

编译器假设你想要自动释放,这通常是正确的,但作者最好考虑它并指定真正想要的东西.

通常,您希望输出参数是自动释放的,类似于函数结果.调用者将获得一个自动释放的对象,如果他们想要保留所有权,则需要将其存储在强变量中.

  • 请解释为什么需要这样做(用于教育目的) (3认同)