Objective-C では、ARC でシングルトンを作成する方法は? ARC では、release、autorelease、retain、retainCount メソッドを上書きすることは許可されていません。オブジェクトが解放されるのを回避するにはどうすればよいですか? 私はARCなしで、古典的なシングルトンが以下のようになることを知っています:
@interface SingletonObject
+ (SingletonObject*)sharedObject;
@end
SingletonObject *sharedObj;
@implementation SingletonObject
+ (id)allocWithZone:(NSZone *)zone
{
if (sharedObj == nil) {
//So the code [[SingletonObject alloc] init] is equal with [SingletonObject sharedObject]
sharedObj = [super allocWithZone:zone];
}
return sharedObj;
}
+ (void)initialize
{
if (self == [SingletonObject class]) {
sharedObj = [[SingletonObject alloc] init];
}
}
+ (SingletonObject*)sharedObject
{
return sharedObj;
}
- (id)retain
{
return self;
}
- (unsigned)retainCount
{
return UINT_MAX; //denotes an object that cannot be released
}
- (oneway void)release
{
//do nothing
}
- (id)autorelease
{
return self;
}
- (id)init {
self = [super init];
if (self) {
//...
}
return self;
}
@end
保持、保持カウント、解放、自動解放メソッドを削除するだけで安全ですか? ありがとう!