稍微想想就会发现,iOS6.0以后的ARC技术,通过编译器自动判断什么地方该加retain什么地方该加release,从而实现无需开发人员参与的自动引用计数;而C++的智能指针,是利用运算符重载,在引用对象超出作用域时将引用计数自动减1,而在需要拷贝构造或赋值时将引用计数自动加1。
这样看来,这两种技术不都是在编译期添加操作引用计数的代码,而在运行期通过判断引用计数是否为零决定是否释放对象吗?本质上没有区别。那苹果从人工管理计数到引入ARC岂不是白白绕了一个大弯?

解决方案 »

  1.   

    OC和C++,不是一回事,所以就不能直接使用C++中的智能指针吧
      

  2.   

    从人工管理到ARC 怎么就绕一个大弯了人工管理 -> 机器辅助(智能指针和ARC) -> 机器管理 (垃圾回收)  本来就是发展的方向. 只是前进了一步而已
      

  3.   


    嗯,这倒是个理由。OC不像C++可以重载运算符,所以没法在语言级支持对退出作用域的判断而只能靠编译器辅助,而C++重载析构函数等等就可以了。
      

  4.   

    ARC的出现是苹果让你更多的去关注业务逻辑,而让内存管理这样不好控制与管理的东西交由编译器来处理。
      

  5.   

    ARC确实和智能指针很像,但也有相当的区别
    Cpp的智能指针是STL库的一部分,而ARC属于编译器层,以前的auto_ptr现在已经不再被推荐使用,意味着遗留代码要做迁移,但ARC技术实际上是编译器在合适位置插入retain,release等调用,如果机制发生变化,代码是不需要迁移的。
    此外ARC不仅仅是'智能指针'而是一个完整的解决方案,包括strong,weak引用,autorelease pool等机制,所以远比'智能指针'要复杂,能解决的问题更多
    再次,'智能指针'通过构造一个对象,并通过其构造,析构来完成计数,而ARC由于采用代码插入方式完成同样得事,所以效率更高初学,拙见,欢迎补充