assign, retain, copy, weak, strong
一、assign, retain, copy 的區(qū)別(引用計數 RC reference count)
參考:IOS基礎:retain,copy,assign及autorelease
1. 假設你用malloc分配了一塊內存,并且把它的地址賦值給了指針a,后來你希望指針b也共享這塊內存,于是你又把a賦值給(assign)了b。此時a 和b指向同一塊內存,請問當a不再需要這塊內存,能否直接釋放它?答案是否定的,因為a并不知道b是否還在使用這塊內存,如果a釋放了,那么b在使用這塊內存的時候會引起程序crash掉。
2. 了解到1中assign的問題,那么如何解決?最簡單的一個方法就是使用引用計數(reference counting),還是上面的那個例子,我們給那塊內存設一個引用計數,當內存被分配并且賦值給a時,引用計數是1。當把a賦值給b時引用計數增加到 2。這時如果a不再使用這塊內存,它只需要把引用計數減1,表明自己不再擁有這塊內存。b不再使用這塊內存時也把引用計數減1。當引用計數變?yōu)?的時候,代表該內存不再被任何指針所引用,系統(tǒng)可以把它直接釋放掉。
3. 上面兩點其實就是assign和retain的區(qū)別,assign就是直接賦值,從而可能引起1中的問題,當數據為int, float, CGFloat等原生類型時,可以使用assign。retain就如2中所述,使用了引用計數,retain引起引用計數加1, release引起引用計數減1,當引用計數為0時,dealloc函數被調用,內存被回收。
4. copy是在你不希望a和b共享一塊內存時會使用到。a和b各自有自己的內存。
當屬性類型為NSString*時,常用copy來保護其封裝性
只要實現屬性所用的對象是“可變的”(mutable),建議用copy
?
?
二、weak, strong的區(qū)別(自動引用計數 ARC Automatic reference count)
weak和strong是ARC引入的
strong相當于retain
weak相當于assign,但是比后者多一點:對象被干掉時會將weak引用設為nil,而對nil發(fā)送消息都不會導致崩潰?
?
轉載于:https://www.cnblogs.com/mobilefeng/p/4590766.html
總結
以上是生活随笔為你收集整理的assign, retain, copy, weak, strong的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: php配置xdebug调试
- 下一篇: JAVA字符串格式化-String.fo