strong和copy的區別

2021-07-24 21:45:16 字數 1110 閱讀 6018

問題描述

在定義乙個類的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標籤的區別

今天模擬面試,第乙個問題就是這個,然後我回答說就是表示強調,然後老師說還有嗎,我說不知道了,然後,就沒有然後了。第乙個層次的區別 標籤是告訴瀏覽器把其中的文字表示為強調的內容,把這段文字用斜體來 表示。如果只想使用斜體字來顯示文字的話,使用標籤。除了強調以外,當引入新的術語或者在 引用特定型別的術語...