iOS面試題集(二)

11.ios7阀坏、ios8和ios9的區(qū)別

解答:
ios7中,pch文件默認是創(chuàng)建好的释液,直接使用就可以
ios8中全释,pch文件需要自己創(chuàng)建(ios——other——PCHfile)并且需要設(shè)置pch文件的路徑(target ——> build setting--> 輸入prefix --> Apple LLVM7.0 -Language —> Prefix Header,后和橋接頭文件的設(shè)置一樣)
ios9中,pch文件的創(chuàng)建以及路徑設(shè)置和ios8中一樣误债,但是需要在pch文件中添加一個標(biāo)記

12.PCH的作用

作用:
就相當(dāng)于Swift中的Swift File浸船, 寫在這里的頭文件或者定義的變量可以全局訪問到
格式:#ifdef __ OBJC __ (內(nèi)容) #endif
內(nèi)容:

1.全局可使用的頭文件
2.可以添加全局可用的宏定義(就相當(dāng)于Swift File中的常量)
宏定義的名稱最好大寫,格式為#define XXXX

13.常用設(shè)計模式:MVC 寝蹈、工廠李命、代理

MVC設(shè)計模式
MVC是一種架構(gòu)模式,M表示數(shù)據(jù)模型Model箫老,V表示視圖View封字,C表示控制器Controller。
1耍鬓、Model負責(zé)存儲阔籽、定義、操作數(shù)據(jù)牲蜀。
2笆制、View用來展示數(shù)據(jù)給用戶,和用戶進行操作交互涣达。
3在辆、Controller是Model于View的協(xié)調(diào)者,Controller把Model中的數(shù)據(jù)拿過來給View使用度苔。 Controller可以直接與Model和View進行通信匆篓,而View不能和Controller直接通信。View與Controller通信需要利用代理協(xié)議的方法寇窑,當(dāng)有數(shù)據(jù)的更新時鸦概,Model也要與Controller進行通信,這個時候使用notificationhe KVO甩骏,這個方式就像一個廣播完残,Model發(fā)射信號,Controller設(shè)置監(jiān)聽器接收信號横漏,當(dāng)有數(shù)據(jù)要更新時,就發(fā)信號給Controller熟掂。Model和View不能直接進行通信缎浇,因為這樣就違背了MVC的設(shè)計思想。

工廠
工廠方法模式:定義創(chuàng)建對象的接口赴肚,讓子類決定實例化哪一個類素跺。工廠方法使得一個類的實例化延遲到其子類二蓝。
使用場景:
1、編譯時無法準(zhǔn)確預(yù)期要創(chuàng)建的對象的類指厌;
2刊愚、類想讓子類決定在運行時創(chuàng)建什么;
3踩验、類有若干輔助類為其子類鸥诽,而你想將返回哪個子類這一信息局部;

代理
代理是一種概念箕憾,是用協(xié)議來實現(xiàn)的牡借。代理是兩個對象之間通訊的一種方式,代理主要做反向傳值袭异,實現(xiàn)系統(tǒng)的一些回調(diào)方法钠龙,一般用來1:1的兩個對象通訊上。

14.frame和bounds的區(qū)別

  • frmae
+ 以`父控件內(nèi)容`的左上角的坐標(biāo)為原點御铃,計算出`控件自己矩形框`的位置的尺寸 
  • bounds
  • 控件自己內(nèi)容的的左上角為坐標(biāo)原點碴里,計算出控件自己矩形框的位置的尺寸
  • 概括
  • frame.size == bounds.size
  • scrollView.bounds.origin == scrollView.contentOffset

用圖說話:

offset.png

參考文獻

15.幾種持久化存儲的區(qū)別:plist、NSUserDefault上真、歸檔(coder)咬腋、數(shù)據(jù)庫

plist文件

property list 屬性列表文件,文件的內(nèi)容只能是 NSString NSNumber NSDate NSData NSArray NSDictionary類的對象內(nèi)容谷羞,不能保存其他類型數(shù)據(jù)帝火。
作用: 對一些登陸注冊信息或者程序的配置信息(小數(shù)據(jù))進行持久化存儲。

歸檔

歸檔(也稱對象序列化湃缎,對象持久化存儲)就是用某種打包格式將對象保存到本地的文件犀填,以便以后讀回該對象的內(nèi)容;解檔(也稱歸檔/讀檔)就是把歸檔的對象文件嗓违,讀成原來的對象的過程九巡。

NSUserDefaults

NSUserDefaults適合存儲輕量級的本地數(shù)據(jù),比如要保存一個登陸界面的數(shù)據(jù)蹂季,用戶名冕广、密碼之類的,個人覺得使用NSUserDefaults是首選偿洁。下次再登陸的時候就可以直接從NSUserDefaults里面讀取上次登陸的信息撒汉。

數(shù)據(jù)庫

數(shù)據(jù)庫管理系統(tǒng)(Database Management System)是一種操縱和管理數(shù)據(jù)庫的大型軟件,用于建立涕滋、使用和維護數(shù)據(jù)庫睬辐,簡稱..DBMS。它對數(shù)據(jù)庫進行統(tǒng)一的管理和控制,以保證數(shù)據(jù)庫的安全性和完整性溯饵。

15.1. sqlite和CoreData的區(qū)別

a. 使用方便性侵俗。一個成熟的工程中一定是對數(shù)據(jù)持久化進行了封裝的,因此底層使用的到底是core data還是sqlite丰刊,不應(yīng)該被業(yè)務(wù)邏輯開發(fā)者關(guān)心隘谣。因此,即使習(xí)慣寫SQL查詢的人啄巧,也應(yīng)該避免在業(yè)務(wù)邏輯中直接編寫SQL語句寻歧。

b. 存儲性能,在寫入性能上棵帽,因為都是使用的sqlite格式作為磁盤存儲格式熄求,因此其性能是一樣的。

c. 查詢性能逗概,core data因為要兼容多種后端格式弟晚,因此查詢時,其可用的語句比直接使用sqlite少逾苫,因此有些fetch實際上不是在sqlite中執(zhí)行的卿城。

d. core data的一個比較大的痛點是多人合作開發(fā)的時候,管理coredata的模型需要很小心铅搓,尤其是合并的時候瑟押,它的data model是XML格式的,手動resolve比較煩心星掰。

e. core data還有其他sql所不具備的優(yōu)點多望,比如對undo的支持,多個context實現(xiàn)sketchbook類似的功能氢烘。為ManagedObject優(yōu)化的row cash等怀偷。

f. 另外core data是支持多線程的,但需要thread confinement的方式實現(xiàn),使用了多線程之后可以最大化的防止阻塞主線程播玖。

16.響應(yīng)者鏈

解答:
子控件/子視圖的響應(yīng)事件響應(yīng)順序:UIApplication --> window --> controller(控制器) --> 父控件(父視圖)--> 子控件/子視圖(第一響應(yīng)者)
注意:其一父類不響應(yīng)就會攔截

17.GCD

回答:
dispatch_get_global_queue 后臺執(zhí)行
dispatch_get_main_queue 主線程執(zhí)行
dispatch_once_t 一次性執(zhí)行
dispatch_time_t 延遲執(zhí)行

dispatch_group_async 并行執(zhí)行
dispatch_group_notify 并行執(zhí)行后匯總

18.UITableView的復(fù)用機制

復(fù)用機制:
UITableView首先加載一屏幕(假設(shè)UITableView的大小是整個屏幕的大小)所需要的UITableViewCell,具體個數(shù)要根據(jù)每個cell的高度而定椎工,總之肯定要鋪滿整個屏幕,更準(zhǔn)確說當(dāng)前加載的cell的高度要大于屏幕高度。然后你往上滑動蜀踏,想要查看更多的內(nèi)容维蒙,那么肯定需要一個新的cell放在已經(jīng)存在內(nèi)容的下邊。這時候先不去生成果覆,而是先去UITableView自己的一個資源池里去獲取颅痊。這個資源池里放了已經(jīng)生成的而且能用的cell。如果資源池是空的話才會主動生成一個新的cell局待。那么這個資源池里的cell又來自哪里呢斑响?當(dāng)你滑動時視圖是吗讶,位于最頂部的cell會相應(yīng)的往上滑動,直到它徹底消失在屏幕上恋捆,消失的cell去了哪里呢?你肯定想到了重绷,是的沸停,它被UITableView放到資源池里了。其他cell也是這樣昭卓,只要一滑出屏幕就放入資源池愤钾。這樣,有進有出候醒,總共需要大約一屏幕多一兩個的cell就夠了能颁。相對于1000來說節(jié)省的資源就是指數(shù)級啊,完美解決了性能問題
注意:
設(shè)置 Cell 的存在差異性的那些屬性(包括樣式和內(nèi)容)時倒淫,有了 if 最好就要有 else伙菊,要顯式的覆蓋所有可能性。
設(shè)置 Cell 的存在差異性的那些屬性時敌土,代碼要放在初始化代碼塊的外部

優(yōu)化:

  • 通過正確的設(shè)置 reuseIdentifier 來重用 Cell镜硕。
  • 盡量減少不必要的透明 View。
  • 盡量避免漸變效果返干、圖片拉伸和離屏渲染兴枯。
  • 當(dāng)不同的行的高度不一樣時,盡量緩存它們的高度值矩欠。
  • 如果Cell 展示的內(nèi)容來自網(wǎng)絡(luò)财剖,確保用異步加載的方式來獲取數(shù)據(jù),并且緩存服務(wù)器的 response癌淮。
    使用 shadowPath 來設(shè)置陰影效果躺坟。
  • 盡量減少 subview 的數(shù)量,對于 subview 較多并且樣式多變的 Cell该默,可以考慮用異步繪制或重寫drawRect瞳氓。
  • 盡量優(yōu)化 - [UITableView tableView:cellForRowAtIndexPath:]
    方法中的處理邏輯,如果確實要做一些處理栓袖,可以考慮做一次匣摘,緩存結(jié)果。
  • 選擇合適的數(shù)據(jù)結(jié)構(gòu)來承載數(shù)據(jù)裹刮,不同的數(shù)據(jù)結(jié)構(gòu)對不同操作的開銷是存在差異的音榜。
    對于 rowHeight、sectionFooterHeight捧弃、sectionHeaderHeight 盡量使用常量赠叼。

19.UITableView的優(yōu)化

  1. 復(fù)用問題
  2. 盡量避免使用動畫
  3. 在圖片數(shù)量多的情況下擦囊,使用異步加載,并做緩存
  4. 自定義cell的時候直接繪制drawRect(幾乎沒人用)

20.內(nèi)存管理

swift中使用的是ARC(自動管理)內(nèi)存管理技術(shù)
oc中使用的是MRC(手動管理)和ARC(自動管理)的內(nèi)存管理技術(shù)
ARC是IOS5推出的新功能嘴办,通過ARC瞬场,可以自動的管理內(nèi)存。在ARC模式下涧郊,只要沒有強指針(強引用)指向?qū)ο蠊岜唬瑢ο缶蜁会尫拧T贏RC模式下妆艘,不允許使用retain彤灶、release、retainCount等方法批旺。并且幌陕,如果使用dealloc方法時,不允許調(diào)用[super dealloc]方法汽煮。
ARC模式下的property變量修飾詞為strong搏熄、weak,相當(dāng)于MRC模式下的retain逗物、assign搬卒。strong :代替retain,缺省關(guān)鍵詞翎卓,代表強引用契邀。weak:代替assign,聲明了一個可以自動設(shè)置nil的弱引用失暴,但是比assign多一個功能坯门,指針指向的地址被釋放之后,指針本身也會自動被釋放逗扒。
注意
在ARC的項目中古戴,對MRC的文件可以添加編譯選項-fno-objc-arc的標(biāo)識;
在MRC的項目中對ARC的文件可以添加編譯選項 -fobjc-arc的標(biāo)識矩肩。

21.代理和通知的區(qū)別

代理:1個對象只能告訴另1個對象發(fā)生了什么事
通知:1個對象可以告訴N個對象發(fā)生了什么事

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末现恼,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子黍檩,更是在濱河造成了極大的恐慌叉袍,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,294評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件刽酱,死亡現(xiàn)場離奇詭異喳逛,居然都是意外死亡,警方通過查閱死者的電腦和手機棵里,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,493評論 3 385
  • 文/潘曉璐 我一進店門润文,熙熙樓的掌柜王于貴愁眉苦臉地迎上來姐呐,“玉大人,你說我怎么就攤上這事典蝌∈锷埃” “怎么了?”我有些...
    開封第一講書人閱讀 157,790評論 0 348
  • 文/不壞的土叔 我叫張陵骏掀,是天一觀的道長麦轰。 經(jīng)常有香客問我,道長砖织,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,595評論 1 284
  • 正文 為了忘掉前任末荐,我火速辦了婚禮侧纯,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘甲脏。我一直安慰自己眶熬,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,718評論 6 386
  • 文/花漫 我一把揭開白布块请。 她就那樣靜靜地躺著娜氏,像睡著了一般。 火紅的嫁衣襯著肌膚如雪墩新。 梳的紋絲不亂的頭發(fā)上贸弥,一...
    開封第一講書人閱讀 49,906評論 1 290
  • 那天,我揣著相機與錄音海渊,去河邊找鬼绵疲。 笑死,一個胖子當(dāng)著我的面吹牛臣疑,可吹牛的內(nèi)容都是我干的盔憨。 我是一名探鬼主播,決...
    沈念sama閱讀 39,053評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼讯沈,長吁一口氣:“原來是場噩夢啊……” “哼郁岩!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起缺狠,我...
    開封第一講書人閱讀 37,797評論 0 268
  • 序言:老撾萬榮一對情侶失蹤问慎,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后儒老,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蝴乔,經(jīng)...
    沈念sama閱讀 44,250評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,570評論 2 327
  • 正文 我和宋清朗相戀三年驮樊,在試婚紗的時候發(fā)現(xiàn)自己被綠了薇正。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片片酝。...
    茶點故事閱讀 38,711評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖挖腰,靈堂內(nèi)的尸體忽然破棺而出雕沿,到底是詐尸還是另有隱情,我是刑警寧澤猴仑,帶...
    沈念sama閱讀 34,388評論 4 332
  • 正文 年R本政府宣布审轮,位于F島的核電站,受9級特大地震影響辽俗,放射性物質(zhì)發(fā)生泄漏疾渣。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 40,018評論 3 316
  • 文/蒙蒙 一崖飘、第九天 我趴在偏房一處隱蔽的房頂上張望榴捡。 院中可真熱鬧,春花似錦朱浴、人聲如沸吊圾。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,796評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽项乒。三九已至,卻和暖如春梁沧,著一層夾襖步出監(jiān)牢的瞬間檀何,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,023評論 1 266
  • 我被黑心中介騙來泰國打工廷支, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留埃碱,地道東北人。 一個月前我還...
    沈念sama閱讀 46,461評論 2 360
  • 正文 我出身青樓酥泞,卻偏偏與公主長得像砚殿,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子芝囤,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,595評論 2 350

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

  • *面試心聲:其實這些題本人都沒怎么背,但是在上海 兩周半 面了大約10家 收到差不多3個offer,總結(jié)起來就是把...
    Dove_iOS閱讀 27,134評論 30 470
  • 1.屬性readwrite似炎,readonly,assign悯姊,retain羡藐,copy,nonatomic 各是什么作...
    曾令偉閱讀 1,048評論 0 10
  • OC的理解與特性 OC作為一門面向?qū)ο蟮恼Z言悯许,自然具有面向?qū)ο蟮恼Z言特性:封裝仆嗦、繼承、多態(tài)先壕。它既具有靜態(tài)語言的特性...
    克魯?shù)吕?/span>閱讀 447評論 0 0
  • OC的理解與特性O(shè)C作為一門面向?qū)ο蟮恼Z言瘩扼,自然具有面向?qū)ο蟮恼Z言特性:封裝谆甜、繼承、多態(tài)集绰。它既具有靜態(tài)語言的特性(...
    LIANMING_LI閱讀 512評論 0 0
  • 以底部需要保持置底為例: 簡單的表格說明: ok: 說明無論頁面內(nèi)容總高度是否超過屏幕的高度规辱,上下拉頁面,或者鍵盤...
    Rose_yang閱讀 485評論 0 0