一、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各自有自己的內存。關於淺拷貝和深拷貝,請參考下一篇文章。
