3

重複の可能性:
どのような状況で、ARCの下に__autoreleasing所有権修飾子を記述する必要がありますか?

インターフェイスでこのメソッドを作成します。

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

実装でオートコンプリートをタブアウトすると、次のように追加されます。

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

ARCを使用すると、自動リリースを使用する必要はないと考えましたが、ARCで正常にコンパイルされるため、これは異なると思います。

ちょっと興味があるんだけど :)

4

1 に答える 1

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;
    }
}

これで、エラーオブジェクトが割り当てられ、関数呼び出しからの自動解放のように「返され」ました。「**」を取るように関数/メソッドを宣言すると、暗黙的に__autoreleaseと表示されます。

于 2012-08-05T03:52:06.173 に答える