【发布时间】:2013-04-25 18:11:05
【问题描述】:
我的应用中有一个单例对象:
+ (id)shared {
@synchronized(self) {
if (sharedDownloadFirstData == nil)
sharedDownloadFirstData = [[self alloc] init];
}
return sharedDownloadFirstData;
}
- (id) init {
if (self = [super init]) {
}
return self;
}
我想知道我是否需要重新编译它(我没有使用 ARC)。为此,我正在使用:
[[DownloadFirstData shared] release];
我需要释放这个对象吗?我需要释放的对象中有一个数组和其他东西。
【问题讨论】:
-
如果它应该持续到应用程序结束,则不需要显式发布。虽然您可能想提供一个只是为了让分析器满意。
-
为什么我不需要发布它?它有一个自动释放?
-
不,它没有自动释放(如果你没有放自动释放)。当应用程序结束时它会被杀死(就像所有仍在内存中的对象一样),因此内存是空闲的。
-
您不必发布它,因为它将在应用程序的整个生命周期内都存在。你也不应该保留。
-
@BrianNickel:来自客户端代码的
retaining 可能是正确的,因为该代码不应该知道或不需要考虑对象是否是单例和/或管理自己的生命周期。它应该遵循内存管理规则,即shared返回一个引用,如果不保留该引用可能随时消失。在这种情况下,当然,每个retain必须与release平衡。
标签: objective-c cocoa-touch memory-management singleton