NSString使用copy還是strong

在日常的編程中經(jīng)常會(huì)使用NSString褒繁,但是NSString到底是使用copy修飾還是使用strong進(jìn)行修飾呢?或者說(shuō)NSString什么時(shí)候使用copy什么時(shí)候使用strong呢何暇?

  • 首先需要知道的是copy的作用温艇,當(dāng)我們使用copy去修飾NSString的時(shí)候,就是想讓這個(gè)NSString不受外部的影響穴肘,比如說(shuō)self.a = b蛾扇,當(dāng)b改變的時(shí)候攘烛,a不會(huì)受到影響還是原來(lái)的值魏滚,這樣保證了安全性

當(dāng)我們使用@property (nonatomic, copy) NSString *a;
并且進(jìn)行賦值self.a = b ;

  1. 如果b是一個(gè)不可變的變量镀首,例如NSString類型,這個(gè)時(shí)候其實(shí)是進(jìn)行了一次淺拷貝鼠次,也就是說(shuō)這個(gè)時(shí)候更哄,不管是strong還是copy屬性的對(duì)象芋齿,其指向的地址都是同一個(gè),即為b指向的地址成翩,在MRC環(huán)境下的效果都是使b指向的對(duì)象的引用計(jì)數(shù)+1觅捆;
  2. 如果b是一個(gè)可變的變量,例如NSMutableString 類型麻敌,這個(gè)時(shí)候就有所不同了栅炒,因?yàn)閏opy修飾的屬性會(huì)進(jìn)行一次深拷貝,也就是說(shuō)其會(huì)創(chuàng)建一個(gè)新的對(duì)象术羔,另外需要注意的是赢赊,這個(gè)copy屬性對(duì)象的類型始終是NSString,而不是NSMutableString级历,因此其是不可變的释移。;

當(dāng)我們使用@property (nonatomic, strong) NSString *a;
并且進(jìn)行賦值self.a = b ;

  1. 無(wú)論b是可變的類型或是不可變的類型寥殖,都不會(huì)創(chuàng)建一個(gè)新的對(duì)象玩讳,效果都是a指向了b指向的對(duì)象,在MRC環(huán)境下嚼贡,就是b指向的對(duì)象的引用計(jì)數(shù)+1
  2. 這種情況帶來(lái)了一個(gè)問(wèn)題熏纯,如果b為可變類型,并且b在外部進(jìn)行了一些修改粤策,這樣導(dǎo)致了a也會(huì)改變豆巨,不安全;另外掐场,如果b是一個(gè)可變的類型例如NSMutableString 類型往扔,那么,_a的類型實(shí)際上就是NSMutableString熊户,因?yàn)镹SString是NSMutableString的父類萍膛,這樣是沒(méi)有問(wèn)題的

總結(jié):

看了這么多那么到底什么時(shí)候使用copy什么時(shí)候使用strong呢?我的經(jīng)驗(yàn)是這樣的嚷堡,

  • 當(dāng)你十分確定將要賦一個(gè)不變的值的時(shí)候用strong蝗罗,當(dāng)我們使用copy修飾a,進(jìn)行賦值的時(shí)候蝌戒,會(huì)對(duì)b進(jìn)行一個(gè)類型的判斷串塑,if ([str isMemberOfClass:[str class]])如果是不可變的類型就直接使用strong的策略,即指向b指向的對(duì)象進(jìn)行淺拷貝北苟,如果b是一個(gè)可變的類型桩匪,那么進(jìn)行一次深拷貝創(chuàng)建一個(gè)新的對(duì)象,試想一下友鼻,如果是一個(gè)你確定的不會(huì)變的值我們?yōu)槭裁催€需要進(jìn)行一次類型的判斷呢傻昙?使用strong能夠提升一定的性能闺骚;
  • 但是很多情況下我們并不能確定要賦的值b是什么類型的,所以我們還是使用copy來(lái)修飾妆档,這樣保證了安全性僻爽。

參考:

NSString屬性什么時(shí)候用copy,什么時(shí)候用strong?

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末贾惦,一起剝皮案震驚了整個(gè)濱河市胸梆,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌须板,老刑警劉巖乳绕,帶你破解...
    沈念sama閱讀 216,402評(píng)論 6 499
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異逼纸,居然都是意外死亡洋措,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,377評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門杰刽,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)菠发,“玉大人,你說(shuō)我怎么就攤上這事贺嫂∽茵” “怎么了?”我有些...
    開封第一講書人閱讀 162,483評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵第喳,是天一觀的道長(zhǎng)糜俗。 經(jīng)常有香客問(wèn)我,道長(zhǎng)曲饱,這世上最難降的妖魔是什么悠抹? 我笑而不...
    開封第一講書人閱讀 58,165評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮扩淀,結(jié)果婚禮上楔敌,老公的妹妹穿的比我還像新娘。我一直安慰自己驻谆,他們只是感情好卵凑,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,176評(píng)論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著胜臊,像睡著了一般勺卢。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上象对,一...
    開封第一講書人閱讀 51,146評(píng)論 1 297
  • 那天黑忱,我揣著相機(jī)與錄音,去河邊找鬼。 笑死杨何,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的沥邻。 我是一名探鬼主播危虱,決...
    沈念sama閱讀 40,032評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼唐全!你這毒婦竟也來(lái)了埃跷?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,896評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤邮利,失蹤者是張志新(化名)和其女友劉穎弥雹,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體延届,經(jīng)...
    沈念sama閱讀 45,311評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡剪勿,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,536評(píng)論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了方庭。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片厕吉。...
    茶點(diǎn)故事閱讀 39,696評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖械念,靈堂內(nèi)的尸體忽然破棺而出头朱,到底是詐尸還是另有隱情,我是刑警寧澤龄减,帶...
    沈念sama閱讀 35,413評(píng)論 5 343
  • 正文 年R本政府宣布项钮,位于F島的核電站,受9級(jí)特大地震影響希停,放射性物質(zhì)發(fā)生泄漏烁巫。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,008評(píng)論 3 325
  • 文/蒙蒙 一宠能、第九天 我趴在偏房一處隱蔽的房頂上張望程拭。 院中可真熱鬧,春花似錦棍潘、人聲如沸恃鞋。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)恤浪。三九已至,卻和暖如春肴楷,著一層夾襖步出監(jiān)牢的瞬間水由,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,815評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工赛蔫, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留砂客,地道東北人泥张。 一個(gè)月前我還...
    沈念sama閱讀 47,698評(píng)論 2 368
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像鞠值,于是被迫代替她去往敵國(guó)和親媚创。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,592評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容