Singleton设计实现



根据我之前的问题,在这里,我已经将我的Data Controller类调整为使用单例设计模式,这样我就只能在多个视图中使用一次。然而,我确实有几个问题,我似乎也找不到解决方案。

首先,我不确定如何在两个视图中调用类/对象以使其工作,其次,我已经用+使初始化方法全局化,但我需要对每个方法都这样做吗?

为了共享数据,我希望能够在视图之间共享的类的初始化是

static SpeecherDataController *_instance = nil;  // <-- important 
+(SpeecherDataController *)instance
{ 
    // skip everything
    if(_instance) return _instance; 
    // Singleton
    @synchronized([SpeecherDataController class]) 
    {
        if(!_instance)
        {
            _instance = [[self alloc] init];
            //  NSLog(@"Creating global instance!"); <-- You should see this once only in your program
        }
        return _instance;
    }
    return nil;
}

该类使用三个可变数组作为主要内容,需要在两个视图中设置和读取这三个数组。

如果我正确理解你的问题,我想答案是:

  1. 你可以使用类似的东西:

    SpeecherDataController * localReference = [SpeecherDataController instance]; 
    

    然后:

    [localReference someMessage:param]; // or ...
    localReference.property = whatever; 
    
  2. 不,SpeecherDataController类上的方法也不需要成为类方法(即,它们不需要有+前缀,如果您想访问其中的ivar,它们可以使用-)。

注意:我认为您希望在instance的实现中用[[SpeecherDataController alloc] init];替换[[self alloc] init];

(另外,请注意:我无法按照您的链接到上面的"此处"查看您之前的问题。因此,如果我误解了什么,我很抱歉。)

相关内容

  • 没有找到相关文章

最新更新