單例模式是在iOS開發(fā)中常用的開發(fā)模式之一泵额,使用單例模式是為了保證在整個(gè)程序中,所定義的屬性值是唯一的
之前對(duì)于單例模式一直模糊不清携添,每個(gè)人的寫法也各有不同嫁盲,現(xiàn)在整理兩種常用的寫法如下,方便查找和參考
#import <Foundation/Foundation.h>
@interface People : NSObject
+ (People *)shareManager; //類方法
@property (nonatomic, copy) NSString *peopleName; //屬性值
@end
#import "People.h"
@implementation People
@synthesize peopleName;
static People *singlePeople = nil;
+ (People *)shareManager {
dispatch_once_t once;
dispatch_once(&once, ^{
singlePeople = [[self alloc] init];
});
return singlePeople;
}
@end
在類方法中使用GCD的方式薪寓,dispatch_once 這個(gè)作用是在整個(gè)程序的生命周期中只執(zhí)行一次代碼亡资,而且保證此線程是同步的;dispatch_once_t 是GCD提供的結(jié)構(gòu)體向叉,在使用的過(guò)程中把地址傳遞給dispatch_once锥腻,dispatch_once就可以記錄代碼是否被調(diào)用過(guò)
#import <Foundation/Foundation.h>
@interface PeopleManager : NSObject
+ (PeopleManager *)shareInstance;
@property (nonatomic, copy) NSString *managerp;
@end
#import "PeopleManager.h"
static PeopleManager *people = nil;
@implementation PeopleManager
+ (PeopleManager *)shareInstance {
@synchronized (people = nil) {
people = [[self alloc] init];
}
return people;
}
- (instancetype)init {
self = [super init];
if (self) {
}
return self;
}
- (NSString *)managerp {
return @"這是一個(gè)單例";
}
@end
第二種寫法同樣是使用類方法,synchronized在方法中的意思是和GCD中的dispatch_once 方法是同樣的效果母谎,保證線程的同步
- (NSString *)managerp {
return @"這是一個(gè)單例";
}
@synthesize peopleName;
這兩個(gè)方法是一致的瘦黑,都是表示get/set方法