iOS @property中的NSString, NSArray, NSDictionary屬性為什么大多時候用copy而不用strong的原因

//聯系人:石虎QQ: 1224614774昵稱:嗡嘛呢叭咪哄

一、代碼實現數組賦值不用copy數據分析

#import"ViewController.h"

@interfaceViewController()

@property(nonatomic,strong)NSArray*array;//全局不可變數組

@end

@implementationViewController

- (void)viewDidLoad {

[superviewDidLoad];

NSMutableArray*mArray = [NSMutableArrayarray];

[mArrayaddObject:@"shihu"];

self.array= mArray;

[mArrayaddObject:@"zhangying"];

NSLog(@"self.array --->%@ ,mArray --> %@",self.array,mArray);

}

提問:大家猜猜控制器會輸出什么數據???

打印結果:

2017-09-10 12:19:28.300bug~demo[74440:1165432] self.array --->(

shihu,

zhangying

) ,mArray --> (

shihu,

zhangying

)

原因很簡單, 因為Objective-C支持多態.

所以表面上self.array是NSArray對象, 其實骨子里是NSMutableArray對象.這樣的話將會對后期DEBUG增加很大的成本, 可能會導致莫名其妙的錯誤.

二、用copy數據分析

- (void)viewDidLoad {

[superviewDidLoad];

NSMutableArray*mArray = [NSMutableArrayarray];

[mArrayaddObject:@"shihu"];

//self.array = mArray;

self.array= [mArraycopy];//淺拷貝一次

[mArrayaddObject:@"zhangying"];

NSLog(@"self.array --->%@ ,mArray --> %@",self.array,mArray);

}

提問:大家猜猜控制器會輸出什么數據???

打印結果:

2017-09-10 12:25:27.720bug~demo[74493:1169444] self.array --->(

shihu

) ,mArray --> (

shihu,

zhangying

)

結論:這樣就能保證不管賦值的是可變還是不可變數組, NSArray就是NSArray了

三、補充圖表更加理解copy與mutableCopy的區別:

圖1:

謝謝!!!

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 本文為轉載: 作者:zyydeveloper 鏈接:http://www.lxweimin.com/p/5f776a...
    Buddha_like閱讀 914評論 0 2
  • *面試心聲:其實這些題本人都沒怎么背,但是在上海 兩周半 面了大約10家 收到差不多3個offer,總結起來就是把...
    Dove_iOS閱讀 27,212評論 30 472
  • 1.oc基本語法 // // main.m // oc基本語法 // // Created by lanou on...
    GOT_HODOR閱讀 449評論 0 0
  • 自己是中專水平,所以對于知識,特別渴望特別渴求,所以我通過很多途徑,進行自我學習,然而我學更多想更多,卻讓我越來越...
    7515b237f6ce閱讀 201評論 0 0
  • 足足的一天 今年在家門口舉辦的谷歌開發者大會內容十分豐富,整個上海國際會議中心,從三樓到七樓,每一層都有相應的分會...
    離枝閱讀 740評論 0 2