2012-07-06 2 views
2

그래서이 서비스 클래스는 Restkit을 사용하여 REST 웹 서비스를 사용합니다. 그것은 내 애플 리케이션에서 자주 사용됩니다. 그것을 사용하기 전에 매번 초기화하는 대신,이 클래스의 객체를 생성하고 appDelegate에서 초기화합니다. 하지만 이렇게하는 것이 가장 좋은 방법일까요?Objective-c에서 자주 액세스하는 클래스를 디자인하는 방법

싱글 톤을 사용하는 것에 대해 생각했지만 멀티 스레딩 환경에서는 조금 걱정되었습니다. 모든 제안은 정말 감사하겠습니다. 감사!

편집 : ARC 환경에서 작업해야한다고 언급해야합니다.

+0

특히 ARC를 사용하는 경우에는 싱글 톤을 피해야합니다. – mydogisbox

+0

@mydog : 그 진술에 대한 몇 가지 근거를 설명해 주시겠습니까? –

+0

@JoshCaswell 더 많이 인스턴스 스타일 싱글 톤에 적용됩니다. – mydogisbox

답변

1

ARC는 실제로 중요하지 않습니다. 당신이 싱글 톤의 측면 인 the negative을 이해하고 그걸 처리 할 준비가되어있는 한 패턴은 잘 동작합니다.

대안으로 제안하는 것은 정적 클래스를 디자인하고 공급자 패턴을 사용하는 것입니다. 이것은 RESTKit과 함께 사용하는 전형적인 인터페이스입니다 (이 인터페이스는 Facebook 그래프 API에 액세스합니다). 더 싱글이 없습니다

@interface FBProvider : NSObject 

+ (BOOL) canMakeRequests; 
+ (id) login; 
+ (id) logout; 

+ (BOOL) application: (UIApplication*) application 
      openURL: (NSURL*) url 
    sourceApplication: (NSString*) sourceApplication 
      annotation: (id) annotation; 

+ (id) perform: (RKRequestMethod) method friends: (Friend*) frien; 
+ (id) perform: (RKRequestMethod) method boasts: (id) obj; 
+ (id) perform: (RKRequestMethod) method invites: (id)obj; 
+ (id) perform: (RKRequestMethod) method likes: (id)obj; 

@end 

은, 모든 정적 및 앱 데이터 모델에서 동작하며 NOT 웹 서비스 UI 업데이트가 자동으로 수행하도록 인터페이스를 디자인합니다.

또는 싱글 톤을 사용해야하는 이유는 진정한 싱글 톤인 앱 대리인을 활용하지 않는 이유입니다. 확장하려면 웹 서비스 또는 데이터 공급자가 기존 싱글 톤의 구성원이 될 것을 제안합니다. 문제를 직접 스레딩하는 것에 대해 걱정할 필요가 없습니다. 코코아에서 처리되기를 바랍니다.

2

오브젝트 데이터가 읽기 전용이거나 보호되는 한 멀티 스레드 또는 ARC 환경에서도 싱글 톤 패턴에 아무런 문제가 없습니다. 이와 같은 클래스를 작성할 때 싱글 톤을 사용하고 GCD를 사용하여 사용하는 거의 변하지 않는 데이터 구조에 대한 액세스를 보호합니다 (현재 요청의 목록과 완료되는 블록을 완료 할 때 실행하는 것과 같습니다).

iOS 5 이상 또는 Mac OS X 10.7 이상을 지원하는 경우 새로운 개인 동시 대기열 및 장벽이 훨씬 효율적입니다. RestKits 멀티 스레딩에 대해서는 잘 모르기 때문에 확인해 봐야 겠지만 여전히 싱글 톤을 권하고 싶습니다.

관련 문제