仅初始化一次类

2 iphone macos cocoa objective-c

我有一个类,其中包含一些需要从另一个类调用的实例方法.我知道怎么做 -

TimeFormatter *myTimeFormatter = [[TimeFormatter alloc] init];
[myTimeFormatter formatTime:time];
Run Code Online (Sandbox Code Playgroud)

但是,每次我需要调用其中一个方法时,我不希望必须分配和初始化TimeFormatter.(我需要从另一个类中的各种方法调用TimeFormatter的方法).

我尝试过

TimeFormatter *myTimeFormatter = [[TimeFormatter alloc] init];
Run Code Online (Sandbox Code Playgroud)

"本身",或者不在任何块中,但是当我编译时,我得到一个"初始化元素不是常量"错误.

任何输入都非常感谢!

Ita*_*tay 7

您可以使用单例模式.你可以在这里阅读更多相关信息.

具体来说,你会做类似的事情:

static TimeFormatter* gSharedTimeFormatter = nil;

@implementation TimeFormatter

+ (TimeFormatter*)sharedTimeFormatter {
  if (!gSharedTimeFormatter) {
    @synchronized(self) {
        if (!gSharedTimeFormatter) {
            gSharedTimeFormatter = [[TimeFormatter alloc] init];
        }
    }
  }
  return gSharedTimeFormatter;
}

...

@end
Run Code Online (Sandbox Code Playgroud)

请注意,我们检查变量是否为null,如果是,则进行锁定,然后再次检查.这样,我们只在分配路径上产生锁定成本,这在程序中只发生一次.这种模式称为双重检查锁定.