【问题标题】:Xcode putting in __autorelease when there's ** in the interface [duplicate]当界面中有**时,Xcode会放入__autorelease [重复]
【发布时间】:2012-08-05 02:24:24
【问题描述】:

可能重复:
In which situations do we need to write the __autoreleasing ownership qualifier under ARC?

在界面中制作这个方法:

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

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

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

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

只是好奇:)

【问题讨论】:

    标签: objective-c xcode


    【解决方案1】:

    自动释放在 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。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-25
      • 1970-01-01
      相关资源
      最近更新 更多