標籤:
#import <Foundation/Foundation.h>@interface FuCardSettings : NSObject+ (FuCardSettings *)sharedInstance ;@end
#import "FuCardSettings.h"@implementation FuCardSettings//================= 單例 ============== startstatic FuCardSettings *sharedSettings = nil;+ (FuCardSettings *)sharedInstance { if(sharedSettings == nil){ sharedSettings = [[[self alloc] init]autorelease]; } return sharedSettings;}+ (id)allocWithZone:(NSZone *)zone { @synchronized(self) { if (sharedSettings == nil) { sharedSettings = [super allocWithZone:zone]; } } return sharedSettings;}+ (id)copyWithZone:(NSZone *)zone { return self;}- (id)retain { return self;}- (NSUInteger)retainCount { return NSUIntegerMax;}- (oneway void)release {}- (id)autorelease { return self;}//================= 單例 ============== end@end
上面是傳統的單例:
還有一種用GCD實現的單例:
#import <Foundation/Foundation.h>@interface Tool1 : NSObject@property(nonatomic,copy)NSString *test;+ (instancetype)instance;@end@implementation Tool1+ (instancetype)instance{ static Tool1* tool; static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ tool = [[Tool1 alloc] init]; }); return tool;}- (instancetype)init{ self = [super init]; if (self) { _test = @"test"; } return self;}@end
該寫法具有以下幾個特性:
1. 安全執行緒。
2. 滿足靜態分析器的要求。
3. 相容了ARC
IOS單例