1

ARC以前の保持と解放の考え方から来ているので、objectiveCでARCに頭を悩ませようとしています。

ARC より前の時代には、新しく作成されたインスタンスを返すメソッドはすべて自動解放プールを使用していました。

- (NSString *)description {
     NSString *output = [NSString stringWithFormat:@"max size is: %d", maxSize];
     return output;
 }

それを保持するのは、この新しく作成されたインスタンスのジョブの受信者でした。

私は興味がある。ARCの世界で、あなたはこれを行うことができますか?

- (NSString *)description {
     NSString *description = [[NSString alloc] initWithFormat:@"max size is: %d", maxSize];
     return description;
}

これは技術的に可能ですか?それは論理的ですか?つまり、気分が悪いです。リテインカウントの邪魔ですよね?

私の質問は、さまざまなゲッターにも当てはまります。例えば:

- (NSArray *)items {
    return [NSArray arrayWithArray:items];
}

することができます

- (NSArray *)items {
    return [[NSArray alloc] initWithArray:items];
}

ARC が保持メッセージと解放メッセージを追加することを理解しました。これらの場合にこれがどのように機能するかを理解したいと思います。

4

1 に答える 1

5

どちらでも使用できます。これが ARC の優れた点です。プロジェクトから来るすべてのオブジェクトを追跡し、すでに自動解放されているかどうかを認識します。はい、あなたは混合することができます。唯一の問題は、ライブラリを作成する場合、命名規則に従う必要があることです。つまり、init は保持されたオブジェクトを返します。

于 2012-07-28T15:48:13.490 に答える