strong和copy的區別

@interface Person : NSObject
@property (strong, nonatomic) NSArray *bookArray1;
@property (copy, nonatomic) NSArray *bookArray2;
@end


@implementation Person
//省略setter方法
@end


//Person調用
main(){
    NSMutableArray *books = [@[@"book1"] mutableCopy];
    Person *person = [[Person alloc] init];
    person.bookArray1 = books;
    person.bookArray2 = books;
    [books addObject:@"book2"];
    NSLog(@"bookArray1:%@",person.bookArray1);
    NSLog(@"bookArray2:%@",person.bookArray2);

}

我們看到,使用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。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章