单例模式是在iOS开发中常用的开发模式之一,使用单例模式是为了保证在整个程序中,所定义的属性值是唯一的
之前对于单例模式一直模糊不清,每个人的写法也各有不同,现在整理两种常用的写法如下,方便查找和参考
#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 这个作用是在整个程序的生命周期中只执行一次代码,而且保证此线程是同步的;dispatch_once_t 是GCD提供的结构体,在使用的过程中把地址传递给dispatch_once,dispatch_once就可以记录代码是否被调用过
#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 @"这是一个单例";
}
@end
第二种写法同样是使用类方法,synchronized在方法中的意思是和GCD中的dispatch_once 方法是同样的效果,保证线程的同步
- (NSString *)managerp {
return @"这是一个单例";
}
@synthesize peopleName;
这两个方法是一致的,都是表示get/set方法