問題描述
在定義乙個類的property時候,為property選擇strong還是copy特別注意和研究明白的,如果property是nsstring或者nsarray及其子類的時候,最好選擇使用copy屬性修飾。為什麼呢?這是為了防止賦值給它的是可變的資料,如果可變的資料發生了變化,那麼該property也會發生變化。
**示例
還是結合**來說明這個情況
@inte***ce
person : nsobject
@property (strong, nonatomic) nsarray *bookarray1;
@property (copy, nonatomic) nsarray *bookarray2;
@end
@implementation
person
//省略setter方法
@end
//person呼叫
main()
我們看到,使用strong修飾的person.bookarray1輸出是[book1,book2],而使用copy修飾的person.bookarray2輸出是[book1]。這下可以看出來區別了吧。
備註:使用strong,則person.bookarray1與可變陣列books指向同一塊記憶體區域,books內容改變,導致person.bookarray1的內容改變,因為兩者是同乙個東西;而使用copy,person.bookarray2在賦值之前,將books內容複製,建立乙個新的記憶體區域,所以兩者不是一回事,books的改變不會導致person.bookarray2的改變。說到底,其實就是不同的修飾符,對應不同的setter方法,
1. strong對應的setter方法,是將_property先release(_property release),然後將引數retain(property retain),最後是_property = property。
2. copy對應的setter方法,是將_property先release(_property release),然後拷貝引數內容(property copy),建立一塊新的記憶體位址,最後_property = property。
strong 和 copy關鍵字的區別
記憶體管理 1.什麼是arc?arc是automatic reference counting自動引用計數,在程式編譯時自動加入retain release。在物件被建立時retain count 1,在物件被release時count 1,當count 0時,銷毀物件。程式中加入autorelea...
ios weak和strong使用的區別
strong與weak是由arc新引入的物件變數屬性 arc引入了新的物件的新生命週期限定,即零弱引用。如果零弱引用指向的物件被deallocated的話,零弱引用的物件會被自動設定為nil。property strong myclass myobject 相當於 property retain m...
em標籤和strong標籤的區別
今天模擬面試,第乙個問題就是這個,然後我回答說就是表示強調,然後老師說還有嗎,我說不知道了,然後,就沒有然後了。第乙個層次的區別 標籤是告訴瀏覽器把其中的文字表示為強調的內容,把這段文字用斜體來 表示。如果只想使用斜體字來顯示文字的話,使用標籤。除了強調以外,當引入新的術語或者在 引用特定型別的術語...