Dawninest

Objective-C | 常用的设计模式,引用和传值

单例模式

单例是生命周期与程序生命周期相同,仅能生成一次,且不能被销毁的唯一实例

单例设计模式要点

  1. 某个类只能有一个实例

  2. 必须自行创建这个对象

  3. 必须自行向整个系统提供这个实例

  4. 该方法必须是一个静态类

单例的创建

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:@“路径名/文件名.后缀名”];