MTA*_*MTA 1 singleton cocoa-touch memory-management objective-c
我的应用程序中有一个单例对象:
+ (id)shared {
@synchronized(self) {
if (sharedDownloadFirstData == nil)
sharedDownloadFirstData = [[self alloc] init];
}
return sharedDownloadFirstData;
}
- (id) init {
if (self = [super init]) {
}
return self;
}
Run Code Online (Sandbox Code Playgroud)
我想知道我是否需要重新评估它(我不使用ARC).为此我正在使用:
[[DownloadFirstData shared] release];
Run Code Online (Sandbox Code Playgroud)
我需要发布这个对象吗?我有一个数组和其他东西在我需要释放的对象中.
在Objective-C中,您应该只调用release
您拥有的对象.这通常意味着你已经有创建的对象alloc
,init
,copy
或mutableCopy
或以其他方式叫retain
上.在这里,消费者[DownloadFirstData shared]
没有调用任何这些功能,也不负责发布它.例如,你可以在任何时候看到这个[UIColor blackColor]
.
retain
如果您正在跨越自动释放边界或者只是不确定生命周期,您可能想调用这样的对象:
DownloadFirstData *local = [[DownloadFirstData shared] retain];
...
[local release];
Run Code Online (Sandbox Code Playgroud)
在这种情况下,您已取得所有权并负责发布.
但是定义怎么样shared
?当您定义一个不使用init
... 的方法时,您通常负责以版本计数0离开,例如[[self alloc] init] autorelease]
.对于单身人士来说情况并非如此,因为您的目标是始终存在,因此始终具有非零保留计数.只需在创建它之后不释放它就可以实现这一点.