首先delegate要使用assign而不是retain,这个问题大家通过看iOS的api就可以了,最典型的是tabView里面的delegate和datasource都是用的assign。

那为什么要使用assign而不是retain呢?
 
其实这个问题从很多方面可以说通的。
 
首先,考虑类的设计模式,类与类只见的大体关系有继承和聚合的关系,当我们使用聚合的时候该对象就拥有聚合的对象,这时候我们就需要retain使引用计数器+1来控制该对象的内存管理,所以我的感觉retain和copy的一项能力就是拥有该对象的内存管理权。
下面就得说delegate了,一个对象没必要管理自己delegate的生命周期,或者说没必要拥有该对象,所以我们只要知道它的指针就可以了,用指针找到对象去调用方法,也就是委托实现的感觉
 
或者我们换个角度,从内存管理方面也可以解释这个问题。delegate的生命周期不需要让该对象去控制,如果该对象对其使用retain很可能导致delegate所指向的对象无法正确的释放。
 
文章转自:http://blog.sina.com.cn/s/blog_6602ffbc01015xbe.html
posted on 2012-08-01 12:48  小苹果一枚  阅读(347)  评论(0编辑  收藏  举报