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].对于单身人士来说情况并非如此,因为您的目标是始终存在,因此始终具有非零保留计数.只需在创建它之后不释放它就可以实现这一点.
| 归档时间: |
|
| 查看次数: |
968 次 |
| 最近记录: |