2012-07-19 7 views
2

나는 아이폰 OS에 5 싱글을 다소 새로운 오전 여기에 설명 된대로 싱글을 사용하고이 같은내 싱글 톤을 개선 할 수 있습니까?

iOS 5 Singletons

뭔가 :

MyManager.h

#import <Foundation/Foundation.h> 
@interface MyManager : NSObject 

//Data for section 1 
@property(nonatomic,copy) NSString * section1a; 
@property(nonatomic, assign) NSUInteger section1b; 


//Data for section 2 
@property(nonatomic,copy) NSString * section2a; 
@property(nonatomic, assign) NSUInteger section2b; 

+ (id)sharedInstance; 
@end 

MyManager.m

@implementation MyManager 
@synthesize section1a, section1b, section2a; , section2b; 

+ (id)sharedInstance 
{ 
    static dispatch_once_t pred = 0; 
    __strong static id _sharedObject = nil; 
    dispatch_once(&pred, ^{ 
     _sharedObject = [[self alloc] init]; // or some other init method 
    }); 
    return _sharedObject; 
} 
@end 

그래서 다음과 같이 사용합니다 :

MyManager * myManager = [MyManager sharedInstance]; 
myManager.data = self.data 

일반적으로 싱글 톤을 어떻게 사용합니까? 내가 놓친 게 있니? 기본 질문에 대해 유감스럽게 생각합니다. 제대로하고 있는지 확인하고 싶습니다. 당신이 ALLOC/초기화 방법이 클래스의 여러 인스턴스를 만들 수 있기 때문에

감사

+0

iOS 5 또는 다른 버전의 차이점을 모르겠습니다. 하지만 당신이 .m 파일에서 이것을 선언했다고 생각합니다 : static MyManager * _sharedObject = nil; –

+0

당신은 단지 당신의 싱글 톤 클래스 ('+ sharedInstance' 메소드를 제외하고)'+ allocWithZone :'과'+ copyWithZone :'에이 두 메소드를 구현할 것이고'static MyManager * _sharedObject; '멤버를 추가 할 수 있습니다 너의 수업에도. :) – holex

답변

1

당신이 올바르게하고 있습니다. 이것은 (현재 :) ARC가 활성화 된 다중 스레드 등으로 잘 작동하는 방법입니다.

더 많은 클래스 인스턴스를 할당 할 수 있기 때문에 엄격하게 싱글 톤이 아니지만 그럴 것이라고 생각하지 않습니다. 귀하의 사건과 관련이 있습니다.

+0

내 코드를 편집하여 진정한 싱글 톤처럼 작동하도록 도와 줄 수 있습니까? – jini

+0

그렇게 할 이유가 거의 없기 때문에 나는 실제로 그것을 반대 할 것입니다. 게시 한 코드는 정상적으로 작동합니다. "진짜"싱글 톤은 수작업으로 메모리를 관리하는 것을 의미합니다. 나는 요즘 거의 할 필요가 없다고 생각합니다. :) –

+0

팁 주셔서 감사합니다. – jini

1

이는 싱글이 아니다. 권리 대답 is here

+1

잘 작동하지만 결정된 사람은'class_createInstance'와 같은 런타임 메소드를 사용할 것입니다. –

0
나는 보통 (우리는 관리자에 대한 싱글하고 있습니다 가정)과 같은 내 싱글을

: 이것은 아주 기본적인 싱글 톤

static (Manager *) instance; 

+ (Manager *) getInstance 
{ 
    if(!instance) instance = [[Manager alloc] init]; 
    return instance; 
} 

를 (이 계정의 멀티 스레딩 고려하지 않거나 다른 고급 기능) 그러나 이것은 기본 형식입니다.

+1

멀티 스레드 코드는 데스크탑에서 플러그를 당기는 것보다 빠르게 실패합니다. –

+0

멀티 스레딩 코드로 인해이 작업이 실패하게됩니다. 그러나 그는 thread-safe 싱글 톤을 원한다고 결코 말하지 않습니다. 나는 그에게 벌거 벗은 뼈 버전 – Nosrettap

+0

을 보여주었습니다. 그는 경고를했습니다 .... – jini

0

참조 : Singleton in iOS 5? 불량 코드가 새 인스턴스를 만들지 않도록 allowWithZone을 재정의해야합니다.

관련 문제