iOS 永不再錯的assign,retain,copy的區(qū)別

本文是本人多次面試跟面試官交流加上自己使用經(jīng)驗的心得體會!適合初級中級iOS開發(fā)工程師。看一遍就能完全理解的assign,retain和copy的區(qū)別,看完這篇文章搞定一切iOS面試


? ?assign:assign在修飾屬性的時候,主要用于基本數(shù)據(jù)類型,int,float等,與引用計數(shù)無關(guān),所以沒有引用計數(shù)的增加或減少,當(dāng)然assign也可以用于修飾對象,但是當(dāng)用來修飾對象的時候,若對象釋放掉了,其指針不會置為nil,weak會!

? ?舉個例子

? ? A *a=【【A alloc】init】;

? ? A *b=【a assign】;

此時a和b指向的是堆中同一塊內(nèi)存地址,a和b在棧中的地址也是一樣的,如果此時a不需要這個內(nèi)存了直接釋放掉,若b還在使用這塊內(nèi)存,就會crash!

? ? retain:retain會使引用計數(shù)增加1,假裝A *a=【【A alloc】init】;此時若有b=【a retain】;則a,b同時指向一塊內(nèi)存地址,此時對象的引用計數(shù)增加到2,如果此時釋放a,并不會造成程序的crash!此時ab所指向的堆中的內(nèi)存地址相同,但是ab在棧中的地址不同

? ?copy:a和b各有自己的內(nèi)存,a和b在棧中的地址不同,其所指向的堆中的內(nèi)存地址也不相同!

總結(jié):assign是一塊兒內(nèi)存,一個指針指向這塊內(nèi)存

retain是一塊內(nèi)存,兩個不同的指針指向這個內(nèi)存

copy是兩個不同的內(nèi)存,各有一個不同的指針指向著!

下面主題是深淺復(fù)制,有時間再寫

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容