我有一个单身人士课程。该类具有使用核心数据的方法,仅用于某些构建配置。
+(AClass*) singletonInstance {
static dispatch_once_t dispatchCall;
static AClass *shared=nil;
dispatch_once(&dispatchCall, ^{
shared=[[AClass alloc] init];
});
return shared;
}
-(id)init{
self=[super init]
if(self){
[self initCoreData];
}
return self;
}
因此,如果我使用以下代码,这将是一个正确的处理方式。我想,这将在编译时处理,因此在运行时它将始终为nil,因此任何方法都被调用
[[AClass singletonInstance] someMethod]
将无效,作为传递给nil对象的消息,该消息不会崩溃,但同时它不会响应该消息。此外,它不会初始化核心数据。
方法1
+(AClass*) singletonInstance {
#if DEBUG==6
static dispatch_once_t dispatchCall;
static AClass *shared=nil;
dispatch_once(&dispatchCall, ^{
shared=[[AClass alloc] init];
});
return shared;
#else
return nil;
#endif
}
方法2 我有一个辅助类,它有单例方法。我有这个方法,并在许多其他类中使用(所以,如果将来如果我将它更改为DEBUG预处理器值,说“10”,那么我将只在一个地方进行更改)。也可以在这里使用吗?
-(BOOL)shouldInitContent{
#if DEBUG==6
return YES;
#else
return NO;
#endif
}
+(AClass*) singletonInstance {
if([[AHelperClass helperInstance] shouldInitContent]){
static dispatch_once_t dispatchCall;
static AClass *shared=nil;
dispatch_once(&dispatchCall, ^{
shared=[[AClass alloc] init];
});
return shared;
}else{
return nil;
}
}
以上两种方法中的哪一种可能有效?
答案 0 :(得分:0)
我会采用方法#1,因为它可以帮助您最小化内存消耗。
在第二种方法中,您使用的是两个单独的实例,我不建议这样做。