OC中的设计模式

block

OC中的block
实质是OC对象

  • 为什么在默认情况下无法修改被block捕获的变量?
    Block只捕获Block中会用到的变量。由于只捕获了自动变量(自动变量是以值传递方式传递到Block的构造函数里面)的值,并非内存地址,所以Block内部不能改变自动变量的值。Block捕获的外部变量可以改变值的是静态变量,静态全局变量,全局变量。

函数指针

为什么代理用weak,delegate和dataSource有什么区别,delegate和block的区别

1.weak指明该对象不会保持delegate,delegate这个对象的销毁由外部控制,strong会强引用delegate,外界不能销毁delegate,会导致循环引用。
2.datasource是关于数据的,都有哪些属性,值等;delegate时关于操作的,有什么方法可以调用。
3.delegate和block都可以回调。delegate是个对象,调用代理协议函数完成操作。block是传递一个函数指针,利用函数指针执行来进行回调。内存管理上,delegate不需要保存引用,block对数据又copy的处理。

KVO

delegate

观察者模式

delegate与通知的区别

  • 协议有控制链(has-a)的关系,通知没有。
  • 通知:一对多。代理/block:一对一。
  • OC中的多继承用委托代理实现

单例

以下两种方法都是线程安全的.不过苹果官方现在提倡方法二.
1.@synchronized

1
2
3
4
5
6
7
8
static Myclass _instance;
+(id)shareInstance{
@synchronized(self){
if(_instance == nil)
_instance = [MyClass alloc] init];
}
return _instance;
}

2.dispatch_once

1
2
3
4
5
6
7
8
+(id)shareInstance{
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
if(_instance == nil)
_instance = [MyClass alloc] init];
});
return _instance;
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
//This method exists for historical reasons; memory zones are no longer used by Objective-C. You should not override this method.
//重写allocWithZone,里面实现跟方法一,方法二一致就行.
+(id)allocWithZone:(struct _NSZone *)zone{
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
if(_instance == nil)
_instance = [MyClass alloc] init];
});
return _instance;
} 这个函数重写,是错误的。请读者注意。

//保证copy时相同
//遵守NSCopying协议,以及在copyWithZone中,直接返回self;
-(id)copyWithZone:(NSZone *)zone{
return _instance;
}

MVC/MVP/MVVM

1.MVC
视图(view):用户界面
模型(model):数据保存
控制器(controller):业务逻辑

通信方式:view->controller->model->view

2.MVP
将controller改名为presenter
各部分之间的通信都是双向的,view与model不发生联系,都通过presenter传递,view薄,controller厚。

通信方式:view<- &-="">presenter<- &-="">model

3.MVVM
将presenter改名为viewmodel
双向绑定,view的变动自动反应在viewmodel,反之亦然。

通信方式:view<->viewmodel<- &-="">model

本文标题:OC中的设计模式

文章作者:谷春丽

发布时间:2018年12月14日 - 11:12

最后更新:2019年09月01日 - 10:09

原始链接:https://guchunli.github.io/2018/12/14/OC中的设计模式/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

-------------本文结束感谢您的阅读-------------