Chapter 18 Copying Objects

The copy and mutableCopy Methods
它們可以創(chuàng)建一份某個(gè)對(duì)象的拷貝,這是通過實(shí)現(xiàn)NSCopying協(xié)議做到的。
如果你想針對(duì)mutable和immutable對(duì)象分別進(jìn)行拷貝,你就必須還要實(shí)現(xiàn)NSMutableCopying協(xié)議熊咽,如下圖所示:


你也可以刪除指定下標(biāo)的元素,如下圖所示:

拷貝的mutable和immutable屬性與源的mutable和immutable屬性無關(guān)闹丐。
Shallow Versus Deep Copying
淺度復(fù)制還是只復(fù)制引用而已横殴,如果你想做到改變拷貝而不改變?cè)稻捅仨毶疃葟?fù)制。
深度復(fù)制并不是默認(rèn)情況下的復(fù)制行為卿拴,所以說無論你使用copy還是mutableCopy那都不是深度復(fù)制衫仑。
如果你想做深度復(fù)制,你就必須創(chuàng)建一個(gè)字符串堕花,然后對(duì)這個(gè)新的字符串進(jìn)行修改文狱,修改完后再用它去替換你原先想要修改的字符串。
但是此時(shí)這個(gè)新創(chuàng)建的字符串與這個(gè)目標(biāo)字符串仍然是同一個(gè)缘挽,你改一個(gè)就等于改倆瞄崇。
Implementing the <NSCopying> Protocol
你必須實(shí)現(xiàn)copyWithZone:方法來應(yīng)對(duì)拷貝行為呻粹,如果你想實(shí)現(xiàn)mutable和immutable拷貝行為,你還要實(shí)現(xiàn)NSMutableCopying協(xié)議中的mutableCopyWithZone:方法苏研。
前者應(yīng)該返回一個(gè)immutable拷貝后者應(yīng)該返回一個(gè)mutable拷貝等浊。
它的用法如下:


上圖中這個(gè)NSZone *是個(gè)很有用的類型,它可以通過把大量零散的空間組織在一起來達(dá)到空間優(yōu)化的目的摹蘑。你可以把它作為參數(shù)傳入copyWithZone:然后交給allocWithZone:處理筹燕。
如果父類實(shí)現(xiàn)了allocWithZone:方法,子類自然就繼承了衅鹿,那么子類的寫法就變成如下這樣子撒踪。

如果父類早就已經(jīng)實(shí)現(xiàn)了allocWithZone,那么你需要在你的copy方法中把父類以上層次中的成分統(tǒng)統(tǒng)復(fù)制一遍大渤。
Copying Objects in Setter and Getter Methods
在setter方法中也存在復(fù)制的問題制妄,也存在你改變參數(shù)的時(shí)候同時(shí)改變了屬性的問題,于是你可以這樣寫:

如果屬性中沒有加nonatomic修飾而是atomic兼犯,你的實(shí)例就必須加mutex鎖忍捡,雖然這會(huì)降低程序執(zhí)行效率集漾,但是為了線程安全這是必須的切黔。
對(duì)于屬性來說沒有mutableCopy限制,所以只能用copy加以限制具篇,所以這導(dǎo)致了immutable拷貝的生成纬霞。
相同的問題也會(huì)出現(xiàn)在getter中,即驱显,你get的結(jié)果不要影響原屬性的值诗芜。當(dāng)然如果屬性本身就是immutable的,你可以直接返回引用埃疫。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末伏恐,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子栓霜,更是在濱河造成了極大的恐慌翠桦,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,265評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件胳蛮,死亡現(xiàn)場(chǎng)離奇詭異销凑,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)仅炊,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,078評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門斗幼,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人抚垄,你說我怎么就攤上這事蜕窿∧甭撸” “怎么了?”我有些...
    開封第一講書人閱讀 156,852評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵桐经,是天一觀的道長(zhǎng)斤贰。 經(jīng)常有香客問我,道長(zhǎng)次询,這世上最難降的妖魔是什么荧恍? 我笑而不...
    開封第一講書人閱讀 56,408評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮屯吊,結(jié)果婚禮上送巡,老公的妹妹穿的比我還像新娘。我一直安慰自己盒卸,他們只是感情好骗爆,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,445評(píng)論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著蔽介,像睡著了一般摘投。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上虹蓄,一...
    開封第一講書人閱讀 49,772評(píng)論 1 290
  • 那天犀呼,我揣著相機(jī)與錄音,去河邊找鬼薇组。 笑死外臂,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的律胀。 我是一名探鬼主播宋光,決...
    沈念sama閱讀 38,921評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼炭菌!你這毒婦竟也來了罪佳?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,688評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤黑低,失蹤者是張志新(化名)和其女友劉穎赘艳,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體投储,經(jīng)...
    沈念sama閱讀 44,130評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡第练,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,467評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了玛荞。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片娇掏。...
    茶點(diǎn)故事閱讀 38,617評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖勋眯,靈堂內(nèi)的尸體忽然破棺而出婴梧,到底是詐尸還是另有隱情下梢,我是刑警寧澤,帶...
    沈念sama閱讀 34,276評(píng)論 4 329
  • 正文 年R本政府宣布塞蹭,位于F島的核電站孽江,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏番电。R本人自食惡果不足惜岗屏,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,882評(píng)論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望漱办。 院中可真熱鬧这刷,春花似錦、人聲如沸娩井。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,740評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽洞辣。三九已至咐刨,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間扬霜,已是汗流浹背定鸟。 一陣腳步聲響...
    開封第一講書人閱讀 31,967評(píng)論 1 265
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留畜挥,地道東北人仔粥。 一個(gè)月前我還...
    沈念sama閱讀 46,315評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像蟹但,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子谭羔,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,486評(píng)論 2 348

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

  • 前言 不敢說覆蓋OC中所有copy的知識(shí)點(diǎn)华糖,但最起碼是目前最全的最新的一篇關(guān)于 copy的技術(shù)文檔了。后續(xù)發(fā)現(xiàn)有新...
    zyydeveloper閱讀 3,344評(píng)論 4 35
  • 作為一個(gè)20年教齡的鄉(xiāng)村教師瘟裸,本來我還是挺安于自己工作客叉,幸福感滿滿的。每天和學(xué)生打交道话告,單純快樂兼搏。工資不高,但是不...
    香杉閱讀 313評(píng)論 0 0
  • 其實(shí)畫了衣服就想棄坑沙郭,慘不忍睹佛呻。可是一想病线,本來就是畫小丑吓著,難看就難看吧~捂嘴笑…… 成品圖 上一張與原圖的對(duì)比圖 線稿
    水漾七七閱讀 550評(píng)論 6 3
  • 其實(shí)·有很多話 一談便·滔滔不絕· 不斷的在思考·在質(zhì)疑· 為什么鲤嫡? 自己決定的·扛在自己的肩上的· 許多的有心無...
    one_two12閱讀 132評(píng)論 0 2
  • 文/達(dá)佚 從出租車上下來張兵直接鉆進(jìn)這幢房子臨街的樓道里。 門口寫著绑莺,二樓紅樓夢(mèng)賓館暖眼,三樓私人按摩,四樓北斗星輔導(dǎo)...
    達(dá)佚閱讀 637評(píng)論 0 4