不太赞同你的说法,
- Person *p=[[person alloc] init];
- Card *c1=[[Car alloc] init];
- Card *c2=[[Car alloc] init];
- p.card=c1;//此时人拥有这张卡,对c1做一次retain
- p.card=c2;//此时人换卡,按循环引用的解决方案是一个assign一个retain,那么此时不会对c1做release,而再对c2最一次retain
- [c1 release];//此时对c1做一次release,c1的计数器为1
- [c2 release];//此时对c2做一次release,c2的计数器为1
- [p release];//p对象被回收,执行dealloc方法,调用[_car release],对当前人拥有的卡c2做一次release至此c2被回收,但是c1没有被回收
复制代码 |