1,描述ios app的生命周期和狀態(tài)
1),Not running 未運(yùn)行 程序沒啟動(dòng)
2),Inactive 未激活 程序在前臺(tái)運(yùn)行,不過沒有接收到事件。在沒有事件處理情況下程序通常停留在這個(gè)狀態(tài)
3),Active 激活 程序在前臺(tái)運(yùn)行而且接收到了事件。這也是前臺(tái)的一個(gè)正常的模式
4),Backgroud 后臺(tái) 程序在后臺(tái)而且能執(zhí)行代碼,大多數(shù)程序進(jìn)入這個(gè)狀態(tài)后會(huì)在在這個(gè)狀態(tài)上停留一會(huì)。時(shí)間到之后會(huì)進(jìn)入掛起狀態(tài)(Suspended)。有的程序經(jīng)過特殊的請(qǐng)求后可以長(zhǎng)期處于Backgroud狀態(tài)
5),Suspended 掛起 程序在后臺(tái)不能執(zhí)行代碼。系統(tǒng)會(huì)自動(dòng)把程序變成這個(gè)狀態(tài)而且不會(huì)發(fā)出通知。當(dāng)掛起時(shí),程序還是停留在內(nèi)存中的,當(dāng)系統(tǒng)內(nèi)存低時(shí),系統(tǒng)就把掛起的程序清除掉,為前臺(tái)程序提供更多的內(nèi)存。
3,+(void)load +(void)initialize; 有什么用處
兩個(gè)方法都可以進(jìn)行一些類的初始化操作。其中有些小區(qū)別。
+(void)load 方法只要加入了工程中,進(jìn)行了編譯,且.m中實(shí)現(xiàn)了這個(gè)方法,都會(huì)調(diào)用一次,值得注意的時(shí)沒實(shí)現(xiàn)的子類是不會(huì)調(diào)用的,就算父類實(shí)現(xiàn)了也不行。
+(void)initialize 在發(fā)送第一條消息給類的時(shí)候進(jìn)行調(diào)用,跟load方法的不同之處在于,比較遲,可實(shí)現(xiàn)懶加載,且父類.m實(shí)現(xiàn)了該方法,子類不實(shí)現(xiàn)也會(huì)調(diào)用父類,跟正常的方法一樣。categories,都實(shí)現(xiàn)了這個(gè)方法,只會(huì)調(diào)用其中一個(gè),具有不確定性。
6、類別和類擴(kuò)展的區(qū)別
*可以進(jìn)行一些類的初始化操作
+(void)load 方法只要加入了工程中,進(jìn)行了編譯,且.m中實(shí)現(xiàn)了這個(gè)方法,都會(huì)調(diào)用一次,值得注意的時(shí)沒實(shí)現(xiàn)的子類是不會(huì)調(diào)用的,就算父類實(shí)現(xiàn)了也不行。 *
category和extension區(qū)別
category: 類別,分類
專門用來(lái)給類添加新的方法,不能給類添加成員屬性,添加了成員變量,也無(wú)法取到
注意:其實(shí)可以通過runtime給分類添加屬性
分類中用@property定義變量,只會(huì)生成變量的getter,setter方法的聲明,不能生成方法實(shí)現(xiàn)和帶下劃線的成員變量。
extension:類擴(kuò)展
可以說成是特殊的分類,也稱作匿名分類,可以給類添加成員屬性,但是是私有變量,可以給類添加方法,也是私有方法
加載時(shí)機(jī):
category加載,把category的實(shí)力方法,協(xié)議,已經(jīng)屬性添加到類上,把類方法和協(xié)議添加到metaclass
分類加載和方法調(diào)用順序
加載:先加載原類的+load方法,再加載分類的+load方法,若多個(gè)分類,則據(jù)編譯順序加載
調(diào)用:先調(diào)用分類的方法,再調(diào)用原類的方法,分類方法會(huì)覆蓋原類的方法
7,block有幾種類型?分別是什么?
根據(jù)isa指針,block一共有3種類型的block
_NSConcreteGlobalBlock 全局靜態(tài)
_NSConcreteStackBlock 保存在棧中,出函數(shù)作用域就銷毀
_NSConcreteMallocBlock 保存在堆中,retainCount == 0銷毀
二,
1,單鏈表反轉(zhuǎn)
2,設(shè)計(jì)一個(gè)網(wǎng)絡(luò)數(shù)據(jù)庫(kù)