稍微想想就会发现,iOS6.0以后的ARC技术,通过编译器自动判断什么地方该加retain什么地方该加release,从而实现无需开发人员参与的自动引用计数;而C++的智能指针,是利用运算符重载,在引用对象超出作用域时将引用计数自动减1,而在需要拷贝构造或赋值时将引用计数自动加1。
这样看来,这两种技术不都是在编译期添加操作引用计数的代码,而在运行期通过判断引用计数是否为零决定是否释放对象吗?本质上没有区别。那苹果从人工管理计数到引入ARC岂不是白白绕了一个大弯?
这样看来,这两种技术不都是在编译期添加操作引用计数的代码,而在运行期通过判断引用计数是否为零决定是否释放对象吗?本质上没有区别。那苹果从人工管理计数到引入ARC岂不是白白绕了一个大弯?
嗯,这倒是个理由。OC不像C++可以重载运算符,所以没法在语言级支持对退出作用域的判断而只能靠编译器辅助,而C++重载析构函数等等就可以了。
Cpp的智能指针是STL库的一部分,而ARC属于编译器层,以前的auto_ptr现在已经不再被推荐使用,意味着遗留代码要做迁移,但ARC技术实际上是编译器在合适位置插入retain,release等调用,如果机制发生变化,代码是不需要迁移的。
此外ARC不仅仅是'智能指针'而是一个完整的解决方案,包括strong,weak引用,autorelease pool等机制,所以远比'智能指针'要复杂,能解决的问题更多
再次,'智能指针'通过构造一个对象,并通过其构造,析构来完成计数,而ARC由于采用代码插入方式完成同样得事,所以效率更高初学,拙见,欢迎补充