KVC KVO delegate block NSNotification 的应用场景 以及各种坑
来源:互联网 发布:外网连接linux服务器 编辑:程序博客网 时间:2024/05/10 00:45
KVC KVO delegate block NSNotification 的应用场景 注意事项
KVC,KVO应用场景:
KVC:
1.字典转模型 ,简化代码量
2.修改系统的只读变量: 例如自定义tabBar的时候,由于tabBar是只读属性,只能用KVC赋值.
3.可以任意修改一个对象的属性和变量(包括私有变量)
4.可以通过运算符层次查找对象的属性,keyPathTeacher *t = [Teacher alloc ] init];
t.chiild = [Child alloc ] init];
t.child.book = [Book alloc] init];
KVC 大招:XBLog(@"%@",ValueForKeyPath(@"child.book"));
KVO:监听属性的变化,记得及时移除,影响性能
代理/通知/block ? 如何选用:假如A和B需要通信,B需要获取A的消息
delegate:如果A和B有相互的关联,就用delegate ,代理是一对多,很多原声控件就是用的代理(UITextField,UITableView等)
notification: .采用单例的设计模式,如果没关系就用通知.,通知是多对多,而且发送的只管发送,接收的只管接收.当需要跨越多个控制器进行传值的时候,notification是一个最方便的选择.,使用完毕需要及时注销
KVO:用于监听属性的变化,观察者模式,可以是多对一
block:跟delegate使用场合类似,使用起来更简单一些.,但block使用都是在一对一
使用注意事项:
delegate:在代理中调用方法的时候是在系统的子线程,因此,当使用delegate进行UI操作的时候必须调用GCD的主线程方法,回到主线程操作. dispatch_async(dispatch_get_main_queue(), <^(void)block>),在block中写进行的UI操作代码。
通知:需要及时注销观察者,这种bug较难查找,不能滥用,否则出现问题也是难于追查
block: 1.block中的对象会自动进行一次retain操作.容易造成内存泄漏2.block内部默认引用为强引用,容易造成循环引用
使用场景的对比:
回调方法:在一些完成之后的问题处理上,一般使用delegate和block,比如网络请求完成后的回调,页面加载完成后的回调.此时,如果是一对一传输回调,就用blcok,因为使用简单.如果是一对多,则delegate更有优势
跨层通信:使用通知
UI响应事件:用delegate,苹果的很多原生控件就是这么做的
简单的值传递:还是block更加高效,代理还需要设置和遵守协议.
- KVC KVO delegate block NSNotification 的应用场景 以及各种坑
- KVC、KVO、NSNotification、delegate 的区别
- iOS 对象之间的通信方式(delegate、block、NSNotification、kvc、kvo)总结
- KVO,NSNotification、Block、Delegate和KVO的区别
- KVC、KVO、NSNotification、delegate 总结及区别
- iOS之KVC、KVO、Delegate、NSNotification区别
- KVO KVC Notification Delegate Block
- KVO,NSNotification,delegate及block区别
- KVO,NSNotification,delegate及block区别?
- KVO,NSNotification,delegate及block区别
- KVC与KVO的应用场景
- iOS 中KVC、KVO、NSNotification、delegate 总结及区别
- iOS 中KVC、KVO、NSNotification、delegate 总结及区别
- iOS 中KVC、KVO、NSNotification、delegate 总结及区别
- iOS 中KVC、KVO、NSNotification、delegate 总结及区别
- iOS 中KVC、KVO、NSNotification、delegate 总结及区别
- iOS 中KVC、KVO、NSNotification、delegate 总结及区别
- iOS 中KVC、KVO、NSNotification、delegate 总结及区别
- PyQt5:关闭窗口(4)
- MFC 消息类型
- android openssl windows环境编译使用
- 二. Ubuntu下安装samba服务器
- 求出能使下式成立的最大数十进制整数3A4B5。
- KVC KVO delegate block NSNotification 的应用场景 以及各种坑
- PyQt5:消息窗口(5)
- 好玩的c语言程序!
- printf函数的使用
- C语言求解素数(质数)的优化:打印100-200之间的素数
- printf函数的返回值
- 编写C语言程序求两个数的最大公约数
- C语言错误:missing ';' before 'type'
- C语言 猜数字游戏