0

ARC を使用して、次のような文字列値を割り当てても問題ありませんか。

 self.userName = [[NSString alloc] initWithString:self.currentParsedCharacterData];

それとも、それでもメモリリークが発生するので、次のように割り当てる必要がありますか?

NSString *tmpString = [[NSString alloc] initWithString:self.currentParsedCharacterData];
self.userName = tmpString;
4

3 に答える 3

2

最初のスニペットは ARC の下で問題なく、2 つの方法のうち優れています。Apple の ARCガイドへの移行 には、次のような例があります。

- (void)contrived {
    Person *aPerson = [[Person alloc] init];
    [aPerson setFirstName:@"William"];
    [aPerson setLastName:@"Dudney"];
    [aPerson setYearOfBirth:[[NSNumber alloc] initWithInteger:2011]];
    NSLog(@"aPerson: %@", aPerson);
}

そして言います:

PersonARC は、オブジェクトもNSNumberオブジェクトもリークしないようにメモリ管理を行います。

edのsetYearOfBirth:付いたメッセージは、スニペットに対応しています。allocNSNumber

コンパイラは、最初のケースでaPersonは範囲外になり、それが発生する前に解放する必要があることを理解し、2 番目のケースでは、オブジェクトへの明示的な参照がなく、NSNumberオブジェクトを解放するか配置する必要があることを認識します。自動解放プール。あなたに代わって、これらの両方の要件を処理します。

于 2012-05-02T02:41:38.843 に答える