나는 ARC를 사용하지 않고 cocos2d version2.0 게임을 사용하여 문제를 찾습니다. 싱글 톤은 유효하지 않습니다.cocos2d version2.0 singleton invalid
두 개의 싱글 톤 MACRO를 사용하는데 문제는 동일합니다.
#ifndef SINGLETON_INTERFACE
#define SINGLETON_INTERFACE(CLASSNAME) \
+(CLASSNAME*) sharedManager;
#endif
#ifndef SINGLETON_IMPLEMENTATION
#define SINGLETON_IMPLEMENTATION(CLASSNAME) \
\
+(CLASSNAME*) sharedManager { \
static dispatch_once_t pred; \
static CLASSNAME* shared##CLASSNAME = nil; \
dispatch_once(&pred, ^{ \
shared##CLASSNAME = [[self alloc] init]; }); \
return shared##CLASSNAME; \
}
#endif
또는
#ifndef SINGLETON_INTERFACE
#define SINGLETON_INTERFACE(CLASSNAME) \
+(CLASSNAME*) sharedManager;
#endif
#ifndef SINGLETON_IMPLEMENTATION
#define SINGLETON_IMPLEMENTATION(CLASSNAME) \
\
static CLASSNAME* shared##CLASSNAME = nil; \
\
+(CLASSNAME*) sharedManager \
{ \
if (shared##CLASSNAME != nil) { \
return shared##CLASSNAME; \
} \
\
@synchronized(self) { \
if (shared##CLASSNAME == nil) { \
shared##CLASSNAME = [[self alloc] init];\
} \
} \
\
return shared##CLASSNAME; \
} \
\
+(id) allocWithZone:(NSZone*)zone \
{ \
@synchronized(self) { \
if (shared##CLASSNAME == nil) { \
shared##CLASSNAME = [super allocWithZone:zone]; \
return shared##CLASSNAME; \
} \
} \
NSAssert(NO, @ "[" #CLASSNAME " alloc] explicitly called on singleton class."); \
return nil; \
} \
\
-(id) copyWithZone:(NSZone*)zone \
{ \
return self; \
} \
\
-(id) retain \
{ \
return self; \
} \
\
-(unsigned) retainCount \
{ \
return UINT_MAX; \
} \
\
-(oneway void) release \
{ \
} \
\
-(id) autorelease \
{ \
return self; \
}
#endif
사용 :
[[CCDirector sharedDirector] replaceScene:[MenuScene sharedManager]];
MenuScene 다시 보여 주지만, 임의의 버튼 (CCMenu) 또는 다른 요소 (CCNode)가 응답이 없을. 첫 번째 호출을 의미합니다. 장면은 모두 괜찮습니다. 다시 호출하면 장면이 표시되지만 메뉴 나 다른 요소에는 응답이 없습니다. 하지만 cocos2d v1.0은 매우 뛰어납니다.
///////////////////////////////////////////////////////////////////////////// ////////////////////
나는이 같은없이 "정리" "[슈퍼 정리]"오버라이드 (override) :
이제-(void) dealloc
{
[super cleanup];
[super dealloc];
}
-(void) cleanup
{
//
}
, 싱글 톤을 실행하는 장면은 괜찮 았지만 안전하게 처리 할 수 있습니까?