例如看看下面的例子:在實例方法中分配對象的建議方法是什麼,它將在以後返回?
代碼1
-(NSString*)getString{
return [[[NSString alloc] initWithFormat:@"test"] autorelease];
}
-(void)printTestString{
NSString *testStr = self.getString;
[testStr retain]
NSLog(@"%@",testStr);
[testStr release]
}
代碼2
-(NSString*)getString{
return [[NSString alloc] initWithFormat:@"test"];
}
-(void)printTestString{
NSString *testStr = self.getString;
NSLog(@"%@",testStr);
[testStr release];
}
代碼1和代碼2應該是有效的代碼段和無泄漏應該會出現。
代碼1使用autorelease,所以返回變量必須保留在printTestString中,並在使用它釋放後。所以在這裏有一個小的開銷,因爲autorelease。
代碼2不會釋放getString中的NSString,因此您必須在使用它之後才能釋放它。似乎你必須少寫,而且沒有開銷,因爲沒有使用autorelease。
哪一個是在那裏使用的事實上的「標準」方法?
我還問自己的另一件事。可在的getString自動釋放和與
[testStr retain]
保留成爲一個問題,當自動釋放池
NSString *testStr = self.getString;
那麼這個字符串是消失後釋放變量權。這是可能的還是編譯器阻止這種事情?
感謝
-Sebo
@MusiGenesis下面是我推薦的方法:如果你不喜歡Obj-C,不要編程,也不要回答人們的Obj-C問題。 – jakev 2011-02-02 23:51:00
@JakeVA謝謝! – Sebo 2011-02-02 23:54:10