首先說明,內容均來自于網絡,由于面試經常用到,權當做自己的筆記.我只是做了簡單的總結
一、assign與weak的區(qū)別
assign主要用來修飾基本的數(shù)據類型,weak用來修飾NSObject,兩者對所修飾的數(shù)據都是** 非擁有關系 **
-
assgin也可以用來修飾NSObject類型,不過由于用assgin修飾的基本數(shù)據類型會出現(xiàn)以下問題
- 對象的內存一般在堆區(qū), assgin修飾的對象,在被釋放之后(釋放不等于抹除),對象所指向的地址依舊保留,造成野指針帮寻。如果在以后的開發(fā)中剛好分配到這塊區(qū)域,則會造成程序crash 乍狐。
- 基本數(shù)據類型存儲的棧區(qū),內存由系統(tǒng)自動管理,基本數(shù)據類型釋放后,系統(tǒng)自動回收內存,因此不會造成野指針錯誤
weak不能用來修飾基本數(shù)據類型,否則編譯器會報錯
weak修飾的對象被釋放后,所占有的存貯空間會被置nil,重新分配
兩個對象相互引用的時候,都無法釋放,造成死循環(huán),可以讓其中一個對象用weak來修飾
當一個對象已經被強引用,則再次引用的時候可以用weak來修飾,比如IBOutlet,控件都有視圖強引用 ,所有用weak修飾就可以
二、strong與copy的區(qū)別
- strong和copy對所修飾的對象都是擁有關系
- strong不會產生新的對象,只是擁有關系,copy會復制一份新的對象