我認爲我理解保留/釋放在Objective-C中的大部分。不過,我有一個具體的案例,我不確定。這裏有一個例子:通過中介方法保留/發佈
+ (NSString *)getPlayerNameByIndex:(NSInteger)globalIndex:(ABAddressBookRef)addressBook
{
...
Player *player = [PlayerHelper loadPlayer:globalIndex];
NSString *name = [PlayerHelper getPlayerName:player :addressBook];
[player release];
// 'retain' here?
return name;
}
+ (NSString *)getPlayerName:(Player *)player:(ABAddressBookRef)addressBook
{
...
NSString *name = [[[NSString alloc] initWithString:player.nickname] autorelease];
return name;
}
於是我打電話......
NSString *name = [PlayerHelper getPlayerNameByIndex:index:addressBook];
// name is 'autorelease'?
我隨機場合看到的是,視圖有時會顯示「姓名」字段爲空時,它填充表從另一種觀點回來後。這可能是另一個問題,但我想確定我使用'autorelease'。
我的問題的核心是在getPlayerName中使用'autorelease'。 「autorelease」狀態是否通過方法getPlayerNameByIndex傳遞給調用方?
或者,我是否必須在中介方法中調用'retain'?我在想'autorelease'可能會在方法getPlayerNameByIndex中釋放。
希望我的問題很明確。任何幫助表示讚賞。
更新:澄清一些詳細信息...
NSError *error = nil;
Player *player = nil;
NSArray *array = [appDelegate.managedObjectContext executeFetchRequest:request error:&error];
if ([array count] == 1)
{
player = [array objectAtIndex:0];
[player retain];
}
這實質上是它加載從核心數據信息的「loadPlayer」的方法。從答案看來,我不需要調用[player retain],因爲它是一個autorelated對象,我可以簡單地返回「player」並使用它?感謝您的迴應!
靜態分析是有幫助你! – justin
我會檢查一下Justin的發言。謝謝! – Christopher
靜態分析儀非常漂亮!我不知道爲什麼我沒有使用它。我確實使用了檢漏儀。在這工作。 – Christopher