本文是本人多次面試跟面試官交流加上自己使用經驗的心得體會!適合初級中級iOS開發工程師。看一遍就能完全理解的assign,retain和copy的區別,看完這篇文章搞定一切iOS面試
? ?assign:assign在修飾屬性的時候,主要用于基本數據類型,int,float等,與引用計數無關,所以沒有引用計數的增加或減少,當然assign也可以用于修飾對象,但是當用來修飾對象的時候,若對象釋放掉了,其指針不會置為nil,weak會!
? ?舉個例子
? ? A *a=【【A alloc】init】;
? ? A *b=【a assign】;
此時a和b指向的是堆中同一塊內存地址,a和b在棧中的地址也是一樣的,如果此時a不需要這個內存了直接釋放掉,若b還在使用這塊內存,就會crash!
? ? retain:retain會使引用計數增加1,假裝A *a=【【A alloc】init】;此時若有b=【a retain】;則a,b同時指向一塊內存地址,此時對象的引用計數增加到2,如果此時釋放a,并不會造成程序的crash!此時ab所指向的堆中的內存地址相同,但是ab在棧中的地址不同
? ?copy:a和b各有自己的內存,a和b在棧中的地址不同,其所指向的堆中的內存地址也不相同!
總結:assign是一塊兒內存,一個指針指向這塊內存
retain是一塊內存,兩個不同的指針指向這個內存
copy是兩個不同的內存,各有一個不同的指針指向著!
下面主題是深淺復制,有時間再寫