淺復(fù)制和深復(fù)制的區(qū)別猾愿?
淺復(fù)制:只復(fù)制指向?qū)ο蟮闹羔樚0耄粡?fù)制引用對象本身他巨。
深復(fù)制:復(fù)制引用對象本身。
意思就是說我有個A對象减江,復(fù)制一份后得到A_copy對象后染突,對于淺復(fù)制來說,A和A_copy指向的是同一個內(nèi)存資源辈灼,復(fù)制的只不個是一個指針觉痛,對象本身資源還是只有一份,那如果我們對A_copy執(zhí)行了修改操作茵休,那么發(fā)現(xiàn)A引用的對象同樣被修改了,這其實違背了我們復(fù)制拷貝的一個思想手蝎。深復(fù)制就好理解了榕莺,內(nèi)存中存在了兩份獨立對象本身。
用通俗的話就是:
淺復(fù)制好比你和你的影子棵介,你完蛋钉鸯,你的影子也完蛋
深復(fù)制好比你和你的克隆人,你完蛋邮辽,你的克隆人還活著唠雕。
類別的作用贸营?繼承和類別在實現(xiàn)中有何區(qū)別?
category可以在不獲悉岩睁,不改變原來代碼的情況下往里面添加新的方法钞脂,只能添加,不能刪除修改捕儒。
并且如果類別和原來類中的方法產(chǎn)生名稱沖突冰啃,則類別將覆蓋原來的方法,因為類別具有更高的優(yōu)先級刘莹。
類別主要有3個作用:
(1)將類的實現(xiàn)分散到多個不同文件或多個不同框架中阎毅。
(2)創(chuàng)建對私有方法的前向引用
(3)向?qū)ο筇砑臃终絽f(xié)議。繼承可以增加点弯,修改或者刪除方法扇调,并且可以增加屬性。
類別和類擴(kuò)展的區(qū)別:
category和extensions的不同在于 后者可以添加屬性抢肛。另外后者添加的方法是必須要實現(xiàn)的狼钮。
extensions可以認(rèn)為是一個私有的category。
objective-c的類可以多重繼承嗎雌团?可以實現(xiàn)多個接口嗎燃领?category是什么?重寫一個類的方式用繼承好還是分類好锦援?為什么猛蔽?
objective-c的類不可以多重繼承;可以實現(xiàn)多個接口灵寺,多繼承在這里是用protocol委托代理來實現(xiàn)的曼库,通過實現(xiàn)多個接口可以完成C++的多重繼承;category是類別略板,用category去重寫類的方法毁枯,僅對本category有效,不會影響到其他類與原有類的關(guān)系叮称。
#import跟#include有什么區(qū)別种玛,@class呢,#import<>跟#import”"又什么區(qū)別?
#import是objective-c導(dǎo)入頭文件的關(guān)鍵字瓤檐,#include是C/C++導(dǎo)入頭文件的關(guān)鍵字赂韵,使用#import頭文件會自動只導(dǎo)入一次,不會重復(fù)導(dǎo)入挠蛉,相當(dāng)于#include和#pragma once祭示;@class告訴編譯器某個類的聲明,當(dāng)執(zhí)行時谴古,才去查看類的實現(xiàn)文件质涛,可以解決頭文件的相互包含稠歉;#import<>用來包含系統(tǒng)的頭文件,#import""用來包含用戶頭文件汇陆。
寫一個setter方法用于完成@property(nonatomic,retain) NSString *name,
寫一個setter方法用于完成@property(nonatomic,copy) NSString *name;
-(void)setName:(NSString *) str
{
[str ?retain];
[name ?release];
name ?= ?str;
}
-(void)setName:(NSString *) str
{ ?
id ?t ?= ?[str ?copy];
[name ?release];
name = t;
}