단일 예제 MJ
// Singleton.h
// , ARC ARC ; , ,
// alloc allocWithZone:
// .h
#define SingletonH(methodName) + (instancetype)share##methodName;
// .m
#if __has_feature(objc_arc) // ARC
#define SingletonM (methodName) \
static id _instance = nil; \
+ (id)allocWithZone:(struct _NSZone *)zone { \
if (_instance == nil) { \
static dispatch_once_t onceToken; \
dispatch_once(&onceToken, ^{ \
_instance = [super allocWithZone:zone]; \
}); \
} \
return _instance; \
} \
\
- (id)init { \
static dispatch_once_t onceToken; \
dispatch_once( &onceToken, ^{ \
_instance = [super init]; \
}); \
return _instance; \
} \
\
+ (id)copyWithZone:(struct _NSZone *)zone { \
return _instance; \
} \
\
+ (id)mutableCopyWithZone:(struct _NSZone *)zone { \
return _instance; \
} \
\
+ (instancetype)share##methodName { \
return [[self alloc] init]; \
}
#else // ARC
#define SingletonM (methodName) \
static id _instance = nil; \
+ (id)allocWithZone:(struct _NSZone *)zone { \
if (_instance == nil) { \
static dispatch_once_t onceToken; \
dispatch_once(&onceToken, ^{ \
_instance = [super allocWithZone:zone]; \
}); \
} \
return _instance; \
} \
\
- (id)init { \
static dispatch_once_t onceToken; \
dispatch_once( &onceToken, ^{ \
_instance = [super init]; \
}); \
return _instance; \
} \
\
+ (id)copyWithZone:(struct _NSZone *)zone { \
return _instance; \
} \
\
+ (id)mutableCopyWithZone:(struct _NSZone *)zone { \
return _instance; \
} \
\
+ (instancetype)share##methodName { \
return [[self alloc] init]; \
} \
\
- (oneway void)release { \
\
} \
\
- (id)retain { \
return self; \
} \
\
- (NSInteger)retainCount { \
return 1; \
}
// \, \
// LYSoundTool.h
#import
#import “Singleton.h”
@interface LYSoundTool : NSObject
SingletonH(SoundTool) // .h SingletonH
@end
// LYSoundTool.m
#import “LYSoundTool.h”
@interface LYSoundTool()
@end
@implementation LYSoundTool
SingletonM(SoundTool) // .m SingletonM
@end
// LYHttpTool.h
#import
#import “Singleton.h”
@interface LYHttpTool : NSObject
SingletonH(HttpTool)
@end
// LYHttpTool.m
#import “LYHttpTool.h”
@implementation LYHttpTool
SingletonM(HttpTool)
@end
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.