博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
iOS中一些概念的理解:delegate,block,notification
阅读量:4107 次
发布时间:2019-05-25

本文共 734 字,大约阅读时间需要 2 分钟。

委托模式

通知:“一对多”,在APP中,很多控制器都需要知道一个事件,应该用通知;


delegate:

1,“一对一”,对同一个协议,一个对象只能设置一个代理delegate,所以单例对象就不能用代理;

2,代理更注重过程信息的传输:比如发起一个网络请求,可能想要知道此时请求是否已经开始、是否收到了数据、数据是否已经接受完成、数据接收失败


block:

1:写法更简练,不需要写protocol、函数等等

2,block注重结果的传输:比如对于一个事件,只想知道成功或者失败,并不需要知道进行了多少或者额外的一些信息

3,block需要注意防止循环引用:


ARC下这样防止:

__weak typeof(self) weakSelf = self;

  [yourBlock:^(NSArray *repeatedArray, NSArray *incompleteArray) {

       [weakSelf doSomething];

    }];


非ARC


__block typeof(self) weakSelf = self;

  [yourBlock:^(NSArray *repeatedArray, NSArray *incompleteArray) {

       [weakSelf doSomething];

    }];

控件事件

UIView使用delegate, UIControl使用target-action形式。比如UISwitch继承于UIControl而不是UIView(当然UIControl最终也是继承于UIView),继承于UIControl的控件使用addTarget添加对应事件而不是代理;UITableView继承于UIView,就是用delegate。

转载地址:http://osvsi.baihongyu.com/

你可能感兴趣的文章
N沟道增强型MOS管双向低频开关电路
查看>>
VS2010点滴——不能将参数 1 从“const char [11]”转换为“LPCWSTR”
查看>>
error C2065: “CString”: 未声明的标识符
查看>>
Building MFC application with /MD[d] (CRT dll version)requires MFC shared dll version~~~~
查看>>
error C2668: “pow”: 对重载函数的调用不明确
查看>>
详解C语言字节对齐
查看>>
Long Long、__int64使用总结
查看>>
c语言内存分配函数
查看>>
c语言内存分配函数之间的区别
查看>>
二维数组和指针的一些感悟
查看>>
二维数组和二级指针
查看>>
VC让对话框显示就最大化
查看>>
Unicode和多字节字符集 (MBCS) 杂谈
查看>>
CString GetBuffer() 与releasebuffer()的使用
查看>>
CString ,BSTR ,LPCTSTR之间关系和区别
查看>>
vs2008无法执行添加/移除操作,因为代码元素**是只读的
查看>>
创建定时器SetTimer(1,1000,NULL)
查看>>
GDI绘图
查看>>
[VC++6.0]如何设置和获取IP地址控件的内容
查看>>
VC++多线程编程
查看>>