objecitive C的單例模式:
#import <Foundation/Foundation.h>
@class SingleInstance;
static SingleInstance *instance = nil;
@interface SingleInstance : NSObject
+ (instancetype)sharedInstance;
@end
@interface SingleInstance ()
@property(strong, nonatomic) NSString *name;
@end
@implementation SingleInstance
+ (instancetype)sharedInstance; {
static dispatch_once_t once_predicate;
dispatch_once(&once_predicate, ^{
instance = [[super allocWithZone:nil]init];
});
return instance;
}
+ (instancetype)allocWithZone:(struct _NSZone *)zone {
return [SingleInstance sharedInstance];
}
- (instancetype)init {
if (self = [super init]) {
_name = @"SingleInstance";
}
return self;
}
@end
測試代碼:
SingleInstance *s1 = [SingleInstance sharedInstance];
SingleInstance *s2 = [[SingleInstance alloc] init];
NSLog(@"s1 address:%p, \ns2 address:%p", s1, s2);