我有4个使用类M1的类(C1,C2,C3,C4)。 M1保存模型和所有数据。如果M1尚未通过Mx的任何Cx类实例化,则它可以被实例化。如果是的话,那么我不想创建它的另一个实例,只需获取指向现有M1实例的指针,以便可以在那里使用数据。
我怎样才能做到这一点?有没有办法搜索该类的实例?
最佳答案
这是the standard Cocoa (pseudo-)singleton implementation的行为:
+ (instancetype)sharedInstance
{
static id sharedInstance;
static dispatch_once_t token;
dispatch_once(&token, ^{
sharedInstance = [[self alloc] init];
});
return sharedInstance;
}
让Cn类仅通过此类方法访问M1,并且您将始终使用同一实例。
其他类仍然可以使用
+alloc
或+new
以常规方式创建自己的M1实例。 (这就是为什么这是伪单例。)共享访问也不必是M1的公共接口的一部分。您可以轻松地将其放入仅对Cn类可见的类别方法。