1.import和 include的區(qū)別
#include:它用于對(duì)系統(tǒng)自帶的頭文件的引用咐低,編譯器會(huì)在系統(tǒng)文件目錄下去查找該文件
#import:大部分功能和#include是一樣的,但是他處理了重復(fù)引用的問(wèn)題,我們?cè)谝梦募臅r(shí)候不用去自己進(jìn)行重復(fù)引用處理
2.@property作用:
a.生成一個(gè)帶_的私有屬性
b.生成這個(gè)私有屬性的getter屁柏,setter方法的聲明
c.生成這個(gè)私有屬性的getter,setter方法的實(shí)現(xiàn)
3.棧和堆區(qū)別
a.棧:存儲(chǔ)的是局部變量货抄。當(dāng)作用域結(jié)束的時(shí)候漆改,由系統(tǒng)回收局部變量所占用的內(nèi)存空間
b.堆:存儲(chǔ)的是程序員手動(dòng)申請(qǐng)的變量或者OC對(duì)象。如果要回收堆空間的變量满着,應(yīng)該要使用free函數(shù)來(lái)進(jìn)行釋放
4.單例打颤,如何使用單例
a.為單例對(duì)象實(shí)現(xiàn)一個(gè)靜態(tài)實(shí)例,并初始化漓滔,然后設(shè)置成nil编饺,
b.實(shí)現(xiàn)一個(gè)實(shí)例構(gòu)造方法檢查上面聲明的靜態(tài)實(shí)例是否為nil,如果是則新建并返回一個(gè)本類的實(shí)例
c.重寫allocWithZone方法响驴,用來(lái)保證其他人直接使用alloc和init試圖獲得一個(gè)新實(shí)力的時(shí)候不產(chǎn)生一個(gè)新實(shí)例透且,
d.適當(dāng)實(shí)現(xiàn)allocWithZone,copyWithZone豁鲤,release和autorelease
4.單例秽誊,如何使用單例
a.為單例對(duì)象實(shí)現(xiàn)一個(gè)靜態(tài)實(shí)例,并初始化琳骡,然后設(shè)置成nil锅论,
b.實(shí)現(xiàn)一個(gè)實(shí)例構(gòu)造方法檢查上面聲明的靜態(tài)實(shí)例是否為nil,如果是則新建并返回一個(gè)本類的實(shí)例
c.重寫allocWithZone方法楣号,用來(lái)保證其他人直接使用alloc和init試圖獲得一個(gè)新實(shí)力的時(shí)候不產(chǎn)生一個(gè)新實(shí)例最易,
d.適當(dāng)實(shí)現(xiàn)allocWithZone怒坯,copyWithZone,release和autorelease
5.繼承和類別的區(qū)別
a.聯(lián)系:可以給一個(gè)類拓展的方法藻懒,或修改已有的方法
b.區(qū)別:
1.繼承修改的方法不會(huì)對(duì)父類原方法產(chǎn)生影響剔猿;類別修改的方法相當(dāng)于替換了原有方法
2.以ViewController舉例,繼承一個(gè)ViewController相當(dāng)于建立一個(gè)新的界面嬉荆;而給一個(gè)ViewController添加類別用于增加或修改原ViewController上的方法
3.類別支持開(kāi)發(fā)人員針對(duì)自己構(gòu)建的類归敬,把相關(guān)的方法分組到多個(gè)單獨(dú)的文件中,對(duì)于大型而復(fù)雜的類鄙早,這有助于提高可維護(hù)性汪茧,并簡(jiǎn)化單個(gè)源文件的管理
4.針對(duì)系統(tǒng)提供的一些類,例如:NSString限番,NSArray陆爽,NSNumber等類,系統(tǒng)本身不提倡使用繼承取拓展方法扳缕,因?yàn)檫@些類內(nèi)部實(shí)現(xiàn)對(duì)繼承有所限制慌闭,所以最后使用類別的方法進(jìn)行拓展。
5.理論上類別不能增加新屬性
6.初始化構(gòu)造
/*1.構(gòu)造函數(shù)
a.創(chuàng)建對(duì)象? [類名 new]? new其實(shí)是一個(gè)類方法躯舔,返回一個(gè)對(duì)象驴剔,他是在NSObject類里面的。
new方法粥庄,內(nèi)部其實(shí)調(diào)用了兩個(gè)方法 : alloc? init
b.alloc方法 是一個(gè)類方法丧失,返回一個(gè)當(dāng)前對(duì)象。
c.init方法? 是一個(gè)對(duì)象方法惜互,返回一個(gè)當(dāng)前對(duì)象
d.以下創(chuàng)建對(duì)象的方式是一樣的布讹。
Person * p1 = [Person new];
Person * p2 = [[Person alloc] init];
e.alloc方法是申請(qǐng)空間創(chuàng)建對(duì)象的,init是初始化對(duì)象的屬性的值的训堆。
init給對(duì)象的屬性賦默認(rèn)值描验。
oc指針 nil
c指針? NULL
bool ? NO
基本類型? 0
現(xiàn)在我們不想? 給這些屬性賦值 賦默認(rèn)值。
重寫init方法坑鱼。
2.重寫init方法 , 有規(guī)范 (構(gòu)造函數(shù))
a.調(diào)用父類的init方法膘流,用self接受。
b.判斷這個(gè)self是否為真鲁沥,如果為真呼股,就執(zhí)行自己初始化的代碼。
c.返回這個(gè)self画恰。
3.自定義構(gòu)造函數(shù): 對(duì)象方法彭谁,名字一定要initWith開(kāi)頭
4.代碼
-(instancetype)initWithName:(NSString *)name andAge:(int)age andGender:(BOOL)gender
{
self = [super init];
if (self)
{
self->_name = name;
self->_age = age;
self->_gender = gender;
}
return self;
}
7.線程和進(jìn)程的區(qū)別和聯(lián)系
一個(gè)進(jìn)程可以有一個(gè)或者多個(gè)線程組成
進(jìn)程和程序并不是—對(duì)應(yīng)的,一個(gè)程序執(zhí)行在不同的數(shù)據(jù)集上就成為不同的進(jìn)程允扇,可以用進(jìn)程控制塊來(lái)唯一地標(biāo)識(shí)每個(gè)進(jìn)程缠局。而這一點(diǎn)正是程序無(wú)法做到的则奥,由于程序沒(méi)有和數(shù)據(jù)產(chǎn)生直接的聯(lián)系,即使是執(zhí)行不同的數(shù)據(jù)的程序甩鳄,他們的指令的集合依然是一樣的逞度,所以無(wú)法唯一地標(biāo)識(shí)出這些運(yùn)行于不同數(shù)據(jù)集上的程序额划。一般來(lái)說(shuō)妙啃,一個(gè)進(jìn)程肯定有一個(gè)與之對(duì)應(yīng)的程序,而且只有一個(gè)俊戳。而且一個(gè)程序有可能沒(méi)有與之對(duì)應(yīng)的進(jìn)程(因?yàn)樗鼪](méi)有執(zhí)行)揖赴,也有可能有多個(gè)進(jìn)程只對(duì)應(yīng)(運(yùn)行在幾個(gè)不同的數(shù)據(jù)集上)。