t]);
?
?
?
?
从上面的输出结果可以得出以下几点结论:
?
和本文一开始分析得出的结果一样,通过指针赋值并不能改变对象的引用计数。
不论是通过指针赋值还是通过retain获得对象,它们都指向同一个内存地址,即:指向同一个对象
在对象的引用计数归零之前,所有指向它的指针都是可用的。通过某个指针发送release消息仅仅是让引用计数减一,该指针本身不会被销毁。
因为这里需要输出引用计数,就没有采用ARC,所以会有一个小问题,那就是当退出局部环境的时候,即使局部指针所指向的对象已被销毁,局部指针变量的值仍然没有改变,因此需要手动赋值为nil。如果采用ARC的话,会自动回收内存并将指针赋值为nil。
?
总结
不管是直接通过指针赋值还是通过retain或者copy来保留对象,都会增加指向对象的指针数量,这些指针都指向同一块内存地址,因为对象所分配的内存地址是不变的。
?
指向对象的指针的多少跟引用计数没有任何关系,但是通过retain、copy或release可以改变对象的引用计数。
?
仅当引用计数为0时才会释放对象占用的内存空间。
?
哎,真是“落花有意流水无情”啊,哪怕再多的指针“爱上对象”,人家这辈子却也只认引用计数。