これは私のシングルトンのコードです
+ (ALData *)sharedInstance {
static ALData *_shared;
if(!_shared) {
static dispatch_once_t oncePredicate;
dispatch_once(&oncePredicate, ^ {
_shared = [[super allocWithZone:nil] init];
});
}
return _shared;
}
+ (id)allocWithZone:(NSZone *)zone { return [self sharedInstance]; }
- (id)copyWithZone:(NSZone *)zone { return self; }
#if (!__has_feature(objc_arc))
- (id)retain { return self; }
- (unsigned)retainCount { return UINT_MAX; }
- (void)release {}
- (id)autorelease { return self; }
#endif
今、私が見たすべてのシングルトンはこの方法で呼び出されています:
[[SINGLETON sharedInstance] instanceMethod];
しかし、私はこの方法で呼び出したい:
[SINGLETON classMethod];
メソッドを作成するときにこれを行うには、次のようにします。
+ (BOOL)decide:(BOOL)var {
[self sharedInstance];
if (var)
return NO;
else
return YES;
}
代わりに、最初の方法で続行したい場合は、次の方法でメソッドを宣言する必要があります。
- (BOOL)decide:(BOOL)var {
if (var)
return NO;
else
return YES;
}
そして、私がそれを呼び出すとき、私は書く必要があります:
[[SINGLETON sharedInstance] decide:YES];
私の質問は次のとおりです。これら2つのアプローチの違いは何ですか? パフォーマンスの点でも、デザイン パターンのレベルでも。これを知りたいのは、審美的に優れた方法は 2 番目のsharedInstance
.
私の質問が明確であることを願っています