2012-05-02 14 views
0

、次のように文字列値を割り当てることがOKである:ARCを使用してObjective Cで文字列値を割り当てる方法は? ARCを使用して

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

や静止ので、このようにそれを割り当てるために私を必要とし、メモリリークが発生しないこと:

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

WWDC 2011セッション323を参照してください。ここでは、誰でも答えが得られるよりはるかに完全にARCについて説明します。 –

答えて

2

最初のスニペットはARCの下では問題ありませんが、2つの方法のほうが優れています。

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

と言う:AppleはTransitioning to ARCガイドでは、このような例があり

PersonNSNumberオブジェクトでもないがリークされているように、ARCは、メモリ管理の世話をします。

allocNSNumbersetYearOfBirth:メッセージがあなたのスニペットに対応しています。

コンパイラは、最初のケースではaPersonが範囲外になり、その前に解放する必要があることを理解しています.2番目のケースでは、NSNumberオブジェクトへの明示的な参照がなく、解放されるか、オートリリースプールに入れられます。それは、あなたのためにこれらの両方の要件を処理します。

+1

このガイドには誤字があります(関数の4行目、 'aPerson:'は 'aPerson'でなければなりません)。私はバグを報告する必要があります。 – dreamlax

+0

それを指摘してくれてありがとう! –

0

はいARCではOKです。実際、私はそれを実装した最初の方法をお勧めします。

0

いずれの例も問題ありません。メモリ管理/ ARCが行われる限り、2つの間に違いはありません。

関連する問題