これは、複数の場所で説明したが、思われる
最初の呼び出しが変更されず、次のようになります。
instanceVar = [[NSMutableArray alloc] initWithObjects:@"1", @"2"];
self.instanceVar = [[NSMutableArray alloc] initWithObjects:@"1", @"2"];
// The previous line will compile to this next line
[self setInstanceVar:[[NSMutableArray alloc] initWithObjects:@"1", @"2"]];
- (void)setInstanceVar:(NSMutableArray *)instanceVar;
メソッドの本体が原因でこのような何か(コンパイラあなたのためにこれを作るになります:コンパイルされたときに0秒の呼び出しは、あなたがretain
と@synthesize
と@property
を使用していると仮定すると(このようになります。あなたの@property
と@sythesize
):コールでそのため
- (void)setInstanceVar:(NSMutableArray *)anInstanceVar
{
if (instanceVar != anInstanceVar) {
[instanceVar release];
instanceVar = [anInstanceVar retain];
}
}
self.instanceVar = [[NSMutableArray alloc] initWithObjects:@"1", @"2"];
新しく作成されたNSMutableArray
に+1保持カウントがあり、設定者を経由して+1保持カウントが追加されました。
これは、あなたが取っているリザーブにマッチするために追加のリリースが必要であることを意味します。 iPhoneでautorelease
を使用しない方が良いと考えられますので、必要なときにメモリが解放されていることを確認できます。したがって、あなたは通常
セッターを通じて
リリースローカルvarは次のようになります
(@jamapagに固定おかげで)アイバーする地元のVARを作成
割り当てローカルVARをパターン
- を取る必要があります
NSArray *tmpMyArray - [[NSArray alloc] initWithObject:@"Hello"];
self.myArray = tmpMyArray;
[tmpMyArray release]; tmpMyArray = nil;
他にもたくさんあります。[検索:objcプロパティautorelease](http://stackoverflow.com/search?q= [objc] + retain + property + autorelease) –