copyWithZone

草莓味辣妹?關注

2018.08.27 19:54*?字數(shù) 533?閱讀 979評論 2喜歡 0

copyWithZone

copyWithZone是NSCopying協(xié)議的方法输枯,只有實現(xiàn)了copyWithZone方法的對象才能夠進行copy的操作花颗。像NSArray棺亭、NSMutableArray凝危,NSDictionary、NSMutableDictionary等內(nèi)部都實現(xiàn)了copyWithZone方法才能進行copy操作势篡。

NSObject類有copyWithZone和MutableCopyWithZone兩個類方法饶辙,但是其本身并沒有實現(xiàn),它要求子類去實現(xiàn)迂苛,子類要調(diào)用copy方法進行復制三热,必須遵循NSCopying協(xié)議實現(xiàn)copyWithZone方法,否則會崩潰三幻。

copy有淺拷貝和深拷貝就漾,具體想要實現(xiàn)哪一種,可以在copyWithZone和MutableCopyWithZone方法里面自定義實現(xiàn)念搬。copy和mutableCopy操作分別對應copyWithZone和MutableCopyWithZone方法抑堡。

對于不可變對象,淺拷貝為指針拷貝朗徊,深拷貝為復制不可變副本

對于可變對象首妖,淺拷貝為不可變副本,深拷貝為可變副本

如果我們想用我們的某個類需要區(qū)別對待這兩個功能——同時提供創(chuàng)建可變副本和不可變副本的話爷恳,一般在NSCopying協(xié)議規(guī)定的方法 copyWithZone中返回不可變副本有缆;而在NSMutableCopying的mutableCopyWithZone方法中返回可變副本。然后調(diào) 用對象的copy和mutableCopy方法來得到副本温亲。

很少自定義可變類型的類妒貌,所以我們可以copyWithZone實現(xiàn)指針拷貝或副本拷貝,這完全取決于作者意愿以及業(yè)務需求

例如我想將copyWithZone方法用于淺拷貝铸豁,即指針拷貝

有一個Product類

@interface Product :NSObject<NSCopying>

@property (strong, nonatomic) NSString* name;

@end

//淺拷貝

@implementation Product

- (id)copyWithZone:(NSZone *)zone {

? ? return self;

}

@end

或者想將copyWithZone方法用于深拷貝灌曙,即副本拷貝

//深拷貝

@implementation Product

- (id)copyWithZone:(NSZone *)zone {

? ? Product *copy = [[Product allocWithZone] init];

????copy.name = self.name; ? //屬性賦值,多個屬性時同理

????return copy; ?//返回副本

}

注意的一點节芥,當Product有子類時在刺,需要這樣寫Product *copy = [[[self class] allocWithZone] init];

因為copyWithZone會被繼承,當子類使用copy方法時头镊,最終會調(diào)用到父類的copyWithZone方法

}

allocWithZone

?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末蚣驼,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子相艇,更是在濱河造成了極大的恐慌颖杏,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,277評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件坛芽,死亡現(xiàn)場離奇詭異留储,居然都是意外死亡翼抠,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評論 3 393
  • 文/潘曉璐 我一進店門获讳,熙熙樓的掌柜王于貴愁眉苦臉地迎上來阴颖,“玉大人,你說我怎么就攤上這事丐膝×坷ⅲ” “怎么了?”我有些...
    開封第一講書人閱讀 163,624評論 0 353
  • 文/不壞的土叔 我叫張陵帅矗,是天一觀的道長偎肃。 經(jīng)常有香客問我,道長浑此,這世上最難降的妖魔是什么累颂? 我笑而不...
    開封第一講書人閱讀 58,356評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮尤勋,結果婚禮上,老公的妹妹穿的比我還像新娘茵宪。我一直安慰自己最冰,他們只是感情好,可當我...
    茶點故事閱讀 67,402評論 6 392
  • 文/花漫 我一把揭開白布稀火。 她就那樣靜靜地躺著暖哨,像睡著了一般。 火紅的嫁衣襯著肌膚如雪凰狞。 梳的紋絲不亂的頭發(fā)上篇裁,一...
    開封第一講書人閱讀 51,292評論 1 301
  • 那天,我揣著相機與錄音赡若,去河邊找鬼达布。 笑死,一個胖子當著我的面吹牛逾冬,可吹牛的內(nèi)容都是我干的黍聂。 我是一名探鬼主播,決...
    沈念sama閱讀 40,135評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼身腻,長吁一口氣:“原來是場噩夢啊……” “哼产还!你這毒婦竟也來了?” 一聲冷哼從身側響起嘀趟,我...
    開封第一講書人閱讀 38,992評論 0 275
  • 序言:老撾萬榮一對情侶失蹤脐区,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后她按,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體牛隅,經(jīng)...
    沈念sama閱讀 45,429評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡炕柔,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,636評論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了倔叼。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片汗唱。...
    茶點故事閱讀 39,785評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖丈攒,靈堂內(nèi)的尸體忽然破棺而出哩罪,到底是詐尸還是另有隱情,我是刑警寧澤巡验,帶...
    沈念sama閱讀 35,492評論 5 345
  • 正文 年R本政府宣布际插,位于F島的核電站,受9級特大地震影響显设,放射性物質(zhì)發(fā)生泄漏框弛。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,092評論 3 328
  • 文/蒙蒙 一捕捂、第九天 我趴在偏房一處隱蔽的房頂上張望瑟枫。 院中可真熱鬧,春花似錦指攒、人聲如沸慷妙。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,723評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽膝擂。三九已至,卻和暖如春隙弛,著一層夾襖步出監(jiān)牢的瞬間架馋,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,858評論 1 269
  • 我被黑心中介騙來泰國打工全闷, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留叉寂,地道東北人。 一個月前我還...
    沈念sama閱讀 47,891評論 2 370
  • 正文 我出身青樓总珠,卻偏偏與公主長得像办绝,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子姚淆,可洞房花燭夜當晚...
    茶點故事閱讀 44,713評論 2 354

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