12.委托是什么?委托的property声明用什么属性?为什么?
委托是delegate(笑),delegate就是将某个方法 要求外部方法来实现.通常是传参数和数据
delegate是cocoa中实现 MVC的一种重要机制.
举例说.假如我用自己的代码重现一个TableView的话. 在TableView的代码实现里.就用protocol 定义了Delegate和Datasource(都是delegate)应该提供的一些方法和参数传进来.
property的声明属性通常用的是assgin,
为什么说通常.假如delegate 比如说 我们写的tableViewController 是tableView的 ref holder的话.那么 显然TableViewController的生存周期是大于等于tableView的 这个时候用assgin,是可以保证任何时候 访问delegate总是不会叫到野指针.
但有一些情况是这样的举例说我创建了一个请求比如网络连接的.而且把自己作为delegate传给了这个 request.那么这里就需要解决一个问题.首先有没有可能在这个请求返回的时候(异步的)这个请求的类已经不存在了或者改变了.这里得看具体情况,具体处理.
通常来说不建议 delegate用 retain 这样容易造成抱死.既相互retain 造成一个instrument都可能无法发现的leak 而且通常是大块的leak