次の例を見て:後で返されるinstance methodeにオブジェクトを割り当てるための推奨されるアプローチは何ですか?例えば
CODE1
-(NSString*)getString{
return [[[NSString alloc] initWithFormat:@"test"] autorelease];
}
-(void)printTestString{
NSString *testStr = self.getString;
[testStr retain]
NSLog(@"%@",testStr);
[testStr release]
}
CODE2
-(NSString*)getString{
return [[NSString alloc] initWithFormat:@"test"];
}
-(void)printTestString{
NSString *testStr = self.getString;
NSLog(@"%@",testStr);
[testStr release];
}
コード1とコード2は、有効なコードスニペットであるべきで、何のリークは表示されないはずです。
コード1は自動解放を使用するため、戻り変数はprintTestStringに保持され、使用後に解放されます。オートレリーズのためにここに小さなオーバーヘッドがあります。
コード2は、getStringのNSStringを解放しないため、使用後に解放する必要があります。 autoreleaseが使用されていないため、あなたは書き込む必要が少なく、オーバーヘッドはありません。
そこで使用されているデファクトスタンダードアプローチはどちらですか?
私は自分自身に尋ねていました。 getStringでの自動解放と
[testStr retain]
で保持
は、自動解放プールは、その文字列がなくなってしまう
NSString *testStr = self.getString;
後に変数権利を離したときに、問題がある可能性があります。それは可能ですか、コンパイラはそのようなことを防ぐのですか?
おかげ
-Sebo
@MusiGenesisここに私の推奨されるアプローチがあります:あなたがObj-Cを好きでないなら、それをプログラミングせずに人々のObj-Cの質問に答えないでください。 – jakev
@ JakeVAありがとう! – Sebo