這在多個地方進行了說明,但似乎你問的不同是什麼
第一個電話是不變的,看起來像這樣:
instanceVar = [[NSMutableArray alloc] initWithObjects:@"1", @"2"];
第二個電話時,編譯會是這個樣子(假設你已經使用了@property
與retain
和@synthesize
:
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;
方法的身體會是這個樣子(編譯器創建這個給你,因爲您@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
會更好,因此您可以確保內存在您需要時被釋放。因此,你通常應該取圖案
- 創建局部變量
- 分配局部變量通過二傳手
- 釋放局部變量
它看起來像這樣(FIXED感謝@jamapag)到伊娃
NSArray *tmpMyArray - [[NSArray alloc] initWithObject:@"Hello"];
self.myArray = tmpMyArray;
[tmpMyArray release]; tmpMyArray = nil;
其中包括:[搜索:objc屬性autorelease](http://stackoverflow.com/search?q= [objc] +保留+屬性+ autorelease) –