3

可能重复:
在哪些情况下我们需要在 ARC 下编写 __autoreleasing 所有权限定符?

在界面中制作此方法:

- (NSArray *)questionsFromJSON:(NSString *)jsonString 
                     withError:(NSError **)error;

在实现中选择自动完成时,它会添加以下内容:

- (NSArray *)questionsFromJSON:(NSString *)jsonString withError:(NSError *__autoreleasing *)error

我认为 ARC 永远不需要使用自动释放,但我猜这是不同的,因为它可以与 ARC 一起编译。

只是好奇 :)

4

1 回答 1

1

Autorelease 在 ARC 中被大量使用。您只是看不到关键字到处都是。

您站点的示例是当您发送指向对象指针的指针时,例如典型的错误场景......

NSError *error = nil; if (![foo bar:&error]) {
    // handle error
}

请注意, bar 方法将执行类似...

- (void)bar:(NSError **errorPtr) {
    // blah...
    if (an_error_happened) {
        NSError *error = [NSError muckityMuck];
        *errorPtr = error;
    }
}

现在,错误对象已被分配,并像函数调用的自动释放一样“返回”。当您声明 s 函数/方法采用“**”时,您隐含地声明了 __autorelease。

于 2012-08-05T03:52:06.173 回答