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

时间:2014-04-09 20:43:13

标签: objective-c pointers properties

我有一个声明如下的函数:

- (void)loadWithCompletion:(MyCompletion)completion error:(NSError**)error;

该函数采用指向NSError的双指针,因此我可以向调用者报告错误。完成(可能是错误)将在调用函数后的某个时间发生。我需要将NSError **存储为属性,以便在上述时间过后我可以使用它。

@property(nonatomic, assign) NSError** error;

此属性声明给出了错误:

  

指向非const类型的NSError *,没有明确的所有权。

1 个答案:

答案 0 :(得分:8)

__autoreleasing之间添加**,以提供NSError*__autoreleasing* error

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

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

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