单例对象或仅使用类进行某些构建配置 - iOS

时间:2015-05-22 04:25:24

标签: ios objective-c singleton

我有一个单身人士课程。该类具有使用核心数据的方法,仅用于某些构建配置。

+(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;
       }

    }

以上两种方法中的哪一种可能有效?

1 个答案:

答案 0 :(得分:0)

我会采用方法#1,因为它可以帮助您最小化内存消耗。

在第二种方法中,您使用的是两个单独的实例,我不建议这样做。