我认为我理解保留/释放在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