iOS 5 学习笔记1 - 使用ARC管理内存
强引用(Strong Reference)
任何时候,一个指针变量(poiter variable)保存了一个对象(Object), 那么这个对象就有了一个拥有者(owner),且将一直保持在内存中。
弱引用(Weak Reference)
现实程序中存在某些特定情况,比如两个对象互相拥有彼此的指针。例如:Class Item中有两个指针变量:Item* containedItem, Item *container。setContainedItem方法中,除了赋给containedItem一个指针,还做了如下处理
- (void)setContainedItem:(Item *)i
{
containedItem = i;
[i setContainer:self];
}
这样,当初始化两个Item的对象后,使用[itemA setContainedIte:itemB]就会造成Retain Cycle的情况。该情况(强引用的情况)下如果把一个含有itemA和itemB的数组设置为nil,并不能释放itemA和itemB所占用的内存。因为这两个对象中还存在对方的指针变量containedItem,container。
弱引用的作用是,当两个对象只存在互相引用,那ARC将释放对象的内存使用。
具体方法是, 把两个互相引用的对象看成是一个父-子关系。在这个关系中,父对象能够拥有子对象,而子对象不能拥有父对象。所以,把子对象对父对象的引用设为弱引用,而父对象对子对象的引用则可以保持强引用。
以Item类为例,之前:
@interface Item:NSObject { Item *containedItem; Item *container; } - (void)setContainedItem:(Item *)i; - (Item *)containedItem; - (void)setContainer:(Item *)i; - (Item *)container;
container指针变量即可设置为弱引用类型:
__weak Item *contaier;
此时,如果只存在俩个对象间存在互相引用,由于弱引用的声明,这两个对象所占内存将被释放。

浙公网安备 33010602011771号