arc,非arc相互转换,对非arc的retainCount,是+1,-1,还是保持不变。 其实retainCount的目的就是确定对象的作用域。为0,则无效,可以释放。 bridge 不会修改非arc的retaincount。 1.如果转换得来的新的非arc对象的作用域不超过老的arc对象, 例如函数参数类型转换,并且,新旧对象是toll free的即底层对象实际上是相同的。 则不需要对新的非arc对象 的retainCount操作。 2.非arc, 转arc,转换后,非arc仍有引用。显然转换不应该修改非arc的retainCount。 如果转换得到一个arc,原来的非arc立即不用了,则transfer ,对非arc,retaincount--。 转换得到一个新的非arc,则要对其retain一次,相当于设置retaincount=1. |
|