单例模式
单例是生命周期与程序生命周期相同,仅能生成一次,且不能被销毁的唯一实例
单例设计模式要点
某个类只能有一个实例
必须自行创建这个对象
必须自行向整个系统提供这个实例
该方法必须是一个静态类
单例的创建
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
| 当例一般以default,share,standard,getinstance开头 .h @property (nonatomic,strong) NSString *name;
//创建单例 //单例:以default,share,standard,getinstance开头 + (Singleton *)shareInstance;
.m //创建单例 + (Singleton *)shareInstance { if (!instance) { //(instance == nil)保证第一次创建成功后不再新建对象 instance = [[Singleton alloc]init]; } return instance; } //全套安全单例的创建,NSObject<NSCopying> + (instancetype)allocWithZone:(struct _NSZone *)zone { @synchronized(self) { 只能开辟一次空间 if (!instance) { instance = [super allocWithZone:zone]; } } return instance; }
- (id)copyWithZone:(NSZone *)zone { return self; }
- (instancetype)retain { return self; }
- (oneway void)release { }
- (instancetype)autorelease { return self; }
- (NSUInteger)retainCount { return NSUIntegerMax; }
GCD创建单例写法
|
观察者模式
事件响应
KVC
通过字符串描述来更改对象状态
存取通过属性或者直接设置实例变量来直接更改对象状态
-valueForKey -setValue:forKey
KVO
建立在KVC之上,能够观察一个对象KVC key path 值的变化
数据的持久化(数据存储) - NSUserDefaluts
1 2 3 4 5
| NSUserDefaluts *userDefaults = [NSUserDefaluts standardNSUserDefaluts]; 存数据: [userDefaults setObject:@“tom” forKey:@“name”]; 取数据: [userDefaults objectForKey:@“name”]; 删数据: [userDefaults removeObjectForKey:@“name”]; 更新数据同步文件 [userDefaults synchronize];
|
读写文件
可以通过代码,根据路径创建文件,来存储数据,这时数据不是存储在沙盒中
1 2
| 存:[array writeToFile:@“路径名/文件名.后缀名” atomically:YES]; 取: [NSArray arrayWithContentsOfFile:@“路径名/文件名.后缀名”];
|