用@property聲明的NSString(或NSArray闺阱,NSDictionary)經(jīng)常使用copy關(guān)鍵字炮车,為什么?如果改用strong關(guān)鍵字酣溃,可能造成什么問題瘦穆?

1)因為父類指針可以指向子類對象,使用copy的目的是為了讓本對象的屬性不受外界影響,使用copy無論給我傳入是一個可變對象還是不可對象,我本身持有的就是一個不可變的副本.

2)如果我們使用是strong,那么這個屬性就有可能指向一個可變對象,如果這個可變對象在外部被修改了,那么會影響該屬性.

copy此特質(zhì)所表達(dá)的所屬關(guān)系與strong類似。然而設(shè)置方法并不保留新值赊豌,而是將其“拷貝” (copy)难审。 當(dāng)屬性類型為NSString時,經(jīng)常用此特質(zhì)來保護(hù)其封裝性亿絮,因為傳遞給設(shè)置方法的新值有可能指向一個NSMutableString類的實例。這個類是NSString的子類,表示一種可修改其值的字符串派昧,此時若是不拷貝字符串黔姜,那么設(shè)置完屬性之后,字符串的值就可能會在對象不知情的情況下遭人更改蒂萎。所以秆吵,這時就要拷貝一份“不可變” (immutable)的字符串,確保對象中的字符串值不會無意間變動五慈。只要實現(xiàn)屬性所用的對象是“可變的” (mutable)纳寂,就應(yīng)該在設(shè)置新屬性值時拷貝一份。

為了理解這種做法泻拦,首先要知道毙芜,對非集合類對象的copy操作:

在非集合類對象中:對immutable對象進(jìn)行copy操作,是指針復(fù)制争拐,mutableCopy操作時內(nèi)容復(fù)制腋粥;對mutable對象進(jìn)行copy和mutableCopy都是內(nèi)容復(fù)制。用代碼簡單表示如下:

[immutableObject copy] // 淺復(fù)制

[immutableObject mutableCopy] //深復(fù)制

[mutableObject copy] //深復(fù)制

[mutableObject mutableCopy] //深復(fù)制


比如以下代碼:

NSMutableString?*string?=?[NSMutableString?stringWithString:@"origin"];//copy

NSString?*stringCopy?=?[string?copy];

查看內(nèi)存架曹,會發(fā)現(xiàn) string隘冲、stringCopy 內(nèi)存地址都不一樣,說明此時都是做內(nèi)容拷貝绑雄、深拷貝展辞。即使你進(jìn)行如下操作:

[string?appendString:@"origion!"]

stringCopy的值也不會因此改變,但是如果不使用copy万牺,stringCopy的值就會被改變罗珍。 集合類對象以此類推。 所以杏愤,

用@property聲明 NSString靡砌、NSArray、NSDictionary 經(jīng)常使用copy關(guān)鍵字珊楼,是因為他們有對應(yīng)的可變類型:NSMutableString通殃、NSMutableArray、NSMutableDictionary厕宗,他們之間可能進(jìn)行賦值操作画舌,為確保對象中的字符串值不會無意間變動,應(yīng)該在設(shè)置新屬性值時拷貝一份已慢。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末曲聂,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子佑惠,更是在濱河造成了極大的恐慌朋腋,老刑警劉巖齐疙,帶你破解...
    沈念sama閱讀 210,914評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異旭咽,居然都是意外死亡贞奋,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,935評論 2 383
  • 文/潘曉璐 我一進(jìn)店門穷绵,熙熙樓的掌柜王于貴愁眉苦臉地迎上來轿塔,“玉大人,你說我怎么就攤上這事仲墨」寸裕” “怎么了?”我有些...
    開封第一講書人閱讀 156,531評論 0 345
  • 文/不壞的土叔 我叫張陵目养,是天一觀的道長俩由。 經(jīng)常有香客問我,道長混稽,這世上最難降的妖魔是什么采驻? 我笑而不...
    開封第一講書人閱讀 56,309評論 1 282
  • 正文 為了忘掉前任,我火速辦了婚禮匈勋,結(jié)果婚禮上礼旅,老公的妹妹穿的比我還像新娘。我一直安慰自己洽洁,他們只是感情好痘系,可當(dāng)我...
    茶點故事閱讀 65,381評論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著饿自,像睡著了一般汰翠。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上昭雌,一...
    開封第一講書人閱讀 49,730評論 1 289
  • 那天复唤,我揣著相機與錄音,去河邊找鬼烛卧。 笑死佛纫,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的总放。 我是一名探鬼主播呈宇,決...
    沈念sama閱讀 38,882評論 3 404
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼局雄!你這毒婦竟也來了甥啄?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,643評論 0 266
  • 序言:老撾萬榮一對情侶失蹤炬搭,失蹤者是張志新(化名)和其女友劉穎蜈漓,沒想到半個月后穆桂,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,095評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡迎变,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,448評論 2 325
  • 正文 我和宋清朗相戀三年充尉,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片衣形。...
    茶點故事閱讀 38,566評論 1 339
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖姿鸿,靈堂內(nèi)的尸體忽然破棺而出谆吴,到底是詐尸還是另有隱情,我是刑警寧澤苛预,帶...
    沈念sama閱讀 34,253評論 4 328
  • 正文 年R本政府宣布句狼,位于F島的核電站,受9級特大地震影響热某,放射性物質(zhì)發(fā)生泄漏腻菇。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,829評論 3 312
  • 文/蒙蒙 一昔馋、第九天 我趴在偏房一處隱蔽的房頂上張望筹吐。 院中可真熱鬧,春花似錦秘遏、人聲如沸丘薛。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,715評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽洋侨。三九已至,卻和暖如春倦蚪,著一層夾襖步出監(jiān)牢的瞬間希坚,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,945評論 1 264
  • 我被黑心中介騙來泰國打工陵且, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留裁僧,地道東北人。 一個月前我還...
    沈念sama閱讀 46,248評論 2 360
  • 正文 我出身青樓滩报,卻偏偏與公主長得像锅知,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子脓钾,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,440評論 2 348

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