我是否必须释放returnSet变量?
NSMutableSet* returnSet = [[NSMutableSet alloc] init];
for (Information* currentInformation in self.information) {
if ([currentInformation.player isEqual:aPlayer]) {
[returnSet addObject:currentInformation];
}
}
return [NSSet setWithSet:returnSet];
感谢您的回答,
基督教
最佳答案
通常,在编写返回新创建的对象的方法时(如您的示例),应该返回一个自动释放的对象。因此,按照约定,您的代码将变为:
NSMutableSet* returnSet = [[NSMutableSet alloc] init];
for (Information* currentInformation in self.information) {
if ([currentInformation.player isEqual:aPlayer]) {
[returnSet addObject:currentInformation];
}
}
return [returnSet autorelease];
请注意,即使您的方法签名指定了NSSet,也可以从方法中返回可变集,因为NSMutableSet是NSSet的子类。使用此方法时,如果您不希望返回的对象卡在周围,则什么也不做,它将被释放。如果希望以后可以访问它,请将其分配给成员变量并保留它,或将其放在另一个保留的数据结构(集合,字典,数组)中。
更新资料
要清除有关此答案正确性的一些明显混淆,请参阅http://developer.apple.com/library/ios/#documentation/cocoa/Conceptual/MemoryMgmt/Articles/mmPractical.html的“从方法返回对象”部分。