Oha*_*gev 2 singleton init singleton-methods alloc ios
我有一个我希望作为Singleton实现的类.
我希望通过以下方式创建/访问此类实例的唯一方法是:
+(MYClass*)sharedInstance
Run Code Online (Sandbox Code Playgroud)
方法.在方法实现中调用alloc和init(当然).
有没有办法阻止alloc和init的使用,或者让它们"空",如果尝试通过sharedInstance方法创建该类的实例(但直接通过alloc + init)?
如果init在实现之外调用此代码,则将此代码放在头文件中会产生编译时错误:
- (id)init __attribute__((unavailable("cannot use init for this class, use +(MYClass*)sharedInstance instead")));
Run Code Online (Sandbox Code Playgroud)
我在这里发现了这种技术.
更新:
您将无法[[MYClass alloc] init]在.m文件中写入,但可以使用以下内容:
+ (MYClass *)sharedInstance {
static MYClass *sharedInstance;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
sharedInstance = [self new];
});
return sharedInstance;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1034 次 |
| 最近记录: |