assign、retain和copy的區別


一、assign屬性

  當數據類型為int、float等原生類型時,可以使用assign,否則可能導致內存泄露。例如當使用malloc分配了一塊內存,並把它的地址賦值給了指針a,后來如果希望指針b也共享這塊內存,於是講a賦值給(assgin)b。這時就用到了assgin,此時a和b指向同一塊內存。但是現在問題出現了,當a不再需要這塊內存時,能都直接釋放呢?肯定是不能的,因為a並不知道b是否還在使用這塊內存,如果a釋放了,那么b在使用這塊內存的時候引起程序crash掉。

二、retain屬性

  retain屬性就是為了解決上述問題而提出的,使用了引用計數(reference counting),還是上面那個例子,我們給那塊內存設一個引用計數,當內存唄分配並且賦值給a時,引用計數是1.當把a賦值給b時引用計數增加到2.這時如果a不再使用這塊內存,它只需要把引用計數減1,表明自己不再擁有這塊內存。b不再使用這塊內存時也把引用計數減1.當引用計數變為0的時候,代表該內存不再被任何指針所引用,系統可以直接釋放掉。此時系統自動調用dealloc函數,內存被回收。

三、copy屬性

  copy是你不希望a和b共享一塊內存時會使用到。a和b各自有自己的內存。關於淺拷貝和深拷貝,請參考下一篇文章。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM