iOS 中strong,weak,copy,assign区别
1:ARC環境下,strong代替retain.weak代替assign
2:weak的作用:在ARC環境下,,所有指向這個對象的weak指針都將被置為nil。這個T特性很有用,相信很多開發者都被指針指向已釋放的對象所造成的EXC_BAD_ACCESS困擾過,使用ARC以后,不論是strong還是weak類型的指針,都不會再指向一個已經銷毀的對象,從根本上解決了意外釋放導致的crash。
?3:assign的作用:簡單賦值,不改變引用計數,對基礎數據類型 (例如NSInteger,CGFloat)和C數據類型(int, float, double, char, 等) 適用簡單數據類型?
4:copy的作用:建立一個索引計數為1 的對象,然后釋放舊對象?
5:strong的作用:在ARC環境下,只要某一對象被一個strong指針指向,該對象就不會被銷毀。如果對象沒有被任何strong指針指向,那么就會被銷毀。在默認情況下,所有的實例變量和局部變量都是strong類型的。可以說strong類型的指針在行為上跟非ARC下得retain是比較相似的?
6:retain的作用:在非ARC時代,你需要自己retain一個想要保持的對象,ARC環境下就不需要了?,F在唯一要做的就是用一個指針指向這個對象,只要指針沒有被重置為空,對象就會一直在堆上。當指針指向新值的時候,原來的對象就會被release一次。這對實例變量,sunthesize的變量或者是局部變量都是實用的。
基本上:
? ??NSString類用copy,控件類用weak,,復雜數據類的用strong,數字類,比如INUIgter,nsinter,cgreck這些用assign
?
? ? ?特別說明一下,在xib/SB拖的控件,連接到代碼建議使用weak。系統原生創建的也是(weak, nonatomic)。不要去更改了,知道為啥不?因為控件拖到xib/SB后,系統自動為其賦了strong,所以拖到代碼就用weak就行了。不信你右鍵xib/SB ->在XML格式下查看就什么都明白了
?
? ? ?如果一個對象在某段時間中反復加載,而你又不希望每次加載都要重新alloc 的話,那就strong,strong 保證對此對象保持一個強引用,對于這個對象,只要有1個strong引用的話,那它就不會 釋放,當然多個strong同時作用于它也不會釋放。
如果一個對象在某段時間只會加載一次,并且加載之后確定不再使用了,那就可以使用weak,這樣當其他原因導致引用計數減1(比如 removefromsuperview)的時候,此對象就自動釋放了。無需再在delloc 里面再release一次,但你要保證釋放之后確實不再使用此對象,否則將導致錯誤
其實strong和retain的作用有些像,只不過strong 和weak是在arc里面引入的,他倆算是一對兒, 對應關系有點類似 retain 和assign?
總結
以上是生活随笔為你收集整理的iOS 中strong,weak,copy,assign区别的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 程序员辞职卖卷饼:4天挣1个月工资!摆摊
- 下一篇: Spring Boot 多模块与 Mav