이 내가 본 모든 싱글이 방법으로 호출되고,목표 - C - - 아이폰 OS 싱글 설명
+ (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 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];
제 질문은 :이 두 접근법의 차이점은 무엇입니까? 둘 다 성능 측면에서, 둘 다 디자인 패턴 수준에서. 미학적으로 더 좋은 방법은 두 번째로 생각하기 때문에 이것을 알고 싶습니다. sharedInstance
을 호출하지 않습니다.
나는 내 질문에
이
http://stackoverflow.com/questions/13188982/singleton-instance-vs-class-methods –
당신의 두 예제 사이에 관계가 없습니다를 호출합니다. 첫 번째 클래스는 Class 메소드를 호출합니다 (첫 번째 라인은 필요하지 않습니다. 왜 작성 했습니까?). 또 하나는 싱글 톤 인스턴스 –
의 끔찍한 예제에서 인스턴스 메소드를 호출합니다. 당신의'+ decide :'메소드는 공유 인스턴스를 얻고, 아무것도 할당하지 않으며, 인스턴스를 필요로하지 않는다. '-decide :'메소드는 객체의 상태에 전혀 의존하지 않기 때문에 클래스 메소드 일 수도 있습니다. 가짜 예제 대신 실제 코드를 게시하십시오. – Caleb