
一. 用一個屬性引用UI控件的時候為什么可以用weak?
controller 是被系統(tǒng)用強(qiáng)指針引用者 只要它存在 那么里面的子控件也就存在 controller強(qiáng)引用著它的view controller又強(qiáng)引用著它的數(shù)組對象subviews 數(shù)組對象又強(qiáng)引用著它所包含的數(shù)組內(nèi)容 那么創(chuàng)建出來的一個UI控件將其加入subviews的時候 那么就會被一個強(qiáng)指針?biāo)?br> 內(nèi)存的合理使用 當(dāng)控件我們需要的時候就已經(jīng)有一個強(qiáng)引用在引用著它 我們就不必再弄一個強(qiáng)指針來強(qiáng)引用它 當(dāng)我們不需要的時候 weak直接釋放掉 用strong的話就還會保留它 這就還占著內(nèi)存了.
二. UITableView 性能優(yōu)化的原理
iOS設(shè)備內(nèi)存有限 如果使用UITableView顯示非常多的數(shù)據(jù) 就需要非常多的UI TableViewcell
那么設(shè)備的內(nèi)存就會耗盡 解決該問題就需重用 UITableView 對象
當(dāng)滾動出列表的時候 部分UITableViewCell 會移出窗口 UITableView會將窗口外的UITableVIewcell 放入一個對象緩存池中
當(dāng)UITableView 要求dataSource 返回UITableView時 dataSource 會先查看緩存池中是否有未使用的UITableViewCell 有就用新的數(shù)據(jù)配置這個UITableViewCell 重新使用到窗口 就避免了重新創(chuàng)建對象
三. 什么是抽象類 有什么作用?能實例化嗎?
abstract修飾,它只能用來作父類,本身并沒有生成實例的能力
它將一類最公有的屬性和方法抽取出來抽象類是將類共有的方法抽取出來,聲明為抽象方法, 抽象方法只有聲明沒有具體的實現(xiàn), 擁有抽象方法的類就是抽象類; 這樣新增一種類型時候只需要繼承抽象類,實現(xiàn)抽象方法就可以了,降低了實現(xiàn)新類的難度。
抽象方法修飾符 abstract 抽象類不能被實現(xiàn)
如果一個類中沒有包含足夠的信息來描繪一個具體的對象,這樣的類就是抽象類
為什么要有抽象類?
用于類型隱藏在面向?qū)ο箢I(lǐng)域,抽象類主要用來進(jìn)行類型隱藏。我們可以構(gòu)造出一個固定的一組行為的抽象描述,但是這組行為卻能夠有任意個可能的具體實現(xiàn)方式。這個抽象描述就是抽象類。
用于拓展對象的行為功能
這一組任意個可能的具體實現(xiàn)則表現(xiàn)為所有可能的派生類(子類),模塊可以操作一個抽象體。由于模塊依賴于一個固定的抽象體,因此它可以是不允許修改的;同時,通過從這個抽象體派生,也可擴(kuò)展此模塊的行為功能。
四. objc中向一個nil對象發(fā)送消息會發(fā)生什么?
沒事
五. runloop和線程有什么聯(lián)系?
Runloop和線程的關(guān)系:一個Runloop對應(yīng)著一條唯一的線程
問題:如何讓子線程不死
回答:給這條子線程開啟一個RunloopRunloop的創(chuàng)建:主線程Runloop已經(jīng)創(chuàng)建好了,子線程的runloop需要手動創(chuàng)建
Runloop的生命周期:在第一次獲取時創(chuàng)建,在線程結(jié)束時銷
六. 什么是懶漢模式,一般用在哪些地方?
懶加載,指得是需要用到的時候才加載,其好處是節(jié)省內(nèi)存空間,不必一開始就創(chuàng)建所有的變量,用到了就創(chuàng)建一塊內(nèi)存,同時也加快了程序運行速度.一般用于我們只需要創(chuàng)建一次的變量就可以的地方,例如字典轉(zhuǎn)模型的數(shù)組,以及控制器的view等,都是懶加載的
七. 常用的延時執(zhí)行的幾種方式?
perform selector
NSTimer
GCD:dispatch_after
八寫出你想到的設(shè)計模式,并簡要描述?
- 單例模式:不管怎么創(chuàng)建,拿到的對象都是同一個
- MVC:MVC把軟件系統(tǒng)分為三個部分:Model,View,Controller。MVC有低耦合性、高重用性、可維護(hù)性等優(yōu)點
- 代理模式:代理模式就是實現(xiàn)消息傳遞的一種機(jī)制,委托方有一些任務(wù)自己不想完成,但是還需要要實現(xiàn),則將該任務(wù)存放到協(xié)議中,由代理完成.但是代理并不會主動的執(zhí)行任務(wù),需要委托方通知代理,然后代理完成委托方交給的任務(wù).
- 觀察者模式:經(jīng)典觀察者模式定義了一種一對多的依賴關(guān)系,讓多個觀察者對象同時監(jiān)聽某一個主題對象。這個主題對象在狀態(tài)上發(fā)生變化時,會通知所有觀察者對象,使它們能夠自動更新自己或者做出相應(yīng)的一些動作。比如KVO,通知中心
九. 是否使用過CoreText或者CoreImage等?如果使用過,請談?wù)勀闶褂肅oreText或者CoreImage的體驗?
用過
CoreText是用于處理文字和字體的底層技術(shù)。Quartz能夠直接處理字體(font)和字形(glyphs),將文字渲染到界面上,它是基礎(chǔ)庫中唯一能夠處理字形的模塊。因此,CoreText為了排版,需要將顯示的文本內(nèi)容、位置、字體、字形直接傳遞給Quartz。相比其它UI組件,由于CoreText直接和Quartz來交互,所以它具有高速的排版效果。
coreImage是IOS5中新加入的一個Objective-c的框架,提供了強(qiáng)大高效的圖像處理功能,用來對基于像素的圖像進(jìn)行操作與分析. iOS提供了很多強(qiáng)大的濾鏡(Filter),其中IOS5中有48種,而到了最新的IOS6 Filter已經(jīng)增加到了93種之多,并且這一數(shù)字會繼續(xù)增加。這些Filter提供了各種各樣的效果,并且還可以通過濾鏡鏈將各種效果的Filter疊加起來,形成強(qiáng)大的自定義效果,如果你對該效果很滿意,還可以子類化濾鏡
十. POST、GET的區(qū)別?
POST:將參數(shù)放在請求體中,參數(shù)的大小原則上沒有限制一般傳輸?shù)臄?shù)據(jù)包含隱私相關(guān)的用POST
GET:將參數(shù)附加在URL后面,因為URL長度的限制,所以參數(shù)的大小是有限制的,通常不能超過1KB
GET 在請求URL后面以?的形式跟上發(fā)給服務(wù)器的參數(shù),多個參數(shù)之間用&隔開
純手動 有地方是個人理解 有誤的地方希望大家能給指出 謝謝
如果對您有幫助 希望能給個關(guān)注和喜歡~~~
大家面試中遇到的問題 也可以留言分享