NSString用copy仍是strong修飾

若是肯定要給屬性NSString賦一個不可變的值時,用strong,其餘狀況用copy。使用copy來修飾屬性,在進行賦值的時候,會先作一個類型判斷,若是賦的值是一個不可變的字符串,則走strong的策略,進行的是淺拷貝;若是是可變的字符串,則進行深拷貝建立一個新的對象。因此若是咱們肯定是給屬性賦值一個不可變的值,就不用copy再多去判斷一遍類型。測試代碼以下:bash

@property(nonatomic, strong) NSString *str1;
@property(nonatomic, copy) NSString *str2;

NSString *data = @"test";
self.str1 = data;
self.str2 = data;
NSLog(@"strongStr = %p,copyStr = %p", self.str1, self.str2);
//打印的是同一個地址:
//strongStr = 0x10298f4f8,copyStr = 0x10298f4f8

NSMutableString *data = [[NSMutableString alloc] initWithString:@"test"];
self.str1 = data;
self.str2 = data;
NSLog(@"strongStr = %p,copyStr = %p", self.str1, self.str2);
//打印的不是同一個地址:
//strongStr = 0x6000003635d0,copyStr = 0xdec3a66540416ef2
複製代碼

咱們常用對象接收網絡數據,一般使用strong,由於不會改變。而如NSCache屬性中的name字段,應該使用copy,否則打印出來的名字就有可能非預想值。網絡

相關文章
相關標籤/搜索