iOS面試題-每日十道-第五天

個人理解 有誤的地方 歡迎小伙伴能給指出

一. 用一個屬性引用UI控件的時候為什么可以用weak?

controller 是被系統用強指針引用者 只要它存在 那么里面的子控件也就存在 controller強引用著它的view controller又強引用著它的數組對象subviews 數組對象又強引用著它所包含的數組內容 那么創建出來的一個UI控件將其加入subviews的時候 那么就會被一個強指針所引著它
內存的合理使用 當控件我們需要的時候就已經有一個強引用在引用著它 我們就不必再弄一個強指針來強引用它 當我們不需要的時候 weak直接釋放掉 用strong的話就還會保留它 這就還占著內存了.

二. UITableView 性能優化的原理

iOS設備內存有限 如果使用UITableView顯示非常多的數據 就需要非常多的UI TableViewcell
那么設備的內存就會耗盡 解決該問題就需重用 UITableView 對象
當滾動出列表的時候 部分UITableViewCell 會移出窗口 UITableView會將窗口外的UITableVIewcell 放入一個對象緩存池中
當UITableView 要求dataSource 返回UITableView時 dataSource 會先查看緩存池中是否有未使用的UITableViewCell 有就用新的數據配置這個UITableViewCell 重新使用到窗口 就避免了重新創建對象

三. 什么是抽象類 有什么作用?能實例化嗎?

abstract修飾,它只能用來作父類,本身并沒有生成實例的能力
它將一類最公有的屬性和方法抽取出來抽象類是將類共有的方法抽取出來,聲明為抽象方法, 抽象方法只有聲明沒有具體的實現, 擁有抽象方法的類就是抽象類; 這樣新增一種類型時候只需要繼承抽象類,實現抽象方法就可以了,降低了實現新類的難度。
抽象方法修飾符 abstract 抽象類不能被實現
如果一個類中沒有包含足夠的信息來描繪一個具體的對象,這樣的類就是抽象類
為什么要有抽象類?
用于類型隱藏在面向對象領域,抽象類主要用來進行類型隱藏。我們可以構造出一個固定的一組行為的抽象描述,但是這組行為卻能夠有任意個可能的具體實現方式。這個抽象描述就是抽象類。
用于拓展對象的行為功能
這一組任意個可能的具體實現則表現為所有可能的派生類(子類),模塊可以操作一個抽象體。由于模塊依賴于一個固定的抽象體,因此它可以是不允許修改的;同時,通過從這個抽象體派生,也可擴展此模塊的行為功能。

四. objc中向一個nil對象發送消息會發生什么?

沒事

五. runloop和線程有什么聯系?

  • Runloop和線程的關系:一個Runloop對應著一條唯一的線程

  • 問題:如何讓子線程不死
    回答:給這條子線程開啟一個Runloop

  • Runloop的創建:主線程Runloop已經創建好了,子線程的runloop需要手動創建

  • Runloop的生命周期:在第一次獲取時創建,在線程結束時銷

六. 什么是懶漢模式,一般用在哪些地方?

懶加載,指得是需要用到的時候才加載,其好處是節省內存空間,不必一開始就創建所有的變量,用到了就創建一塊內存,同時也加快了程序運行速度.一般用于我們只需要創建一次的變量就可以的地方,例如字典轉模型的數組,以及控制器的view等,都是懶加載的

七. 常用的延時執行的幾種方式?

perform selector
NSTimer
GCD:dispatch_after

八寫出你想到的設計模式,并簡要描述?

  • 單例模式:不管怎么創建,拿到的對象都是同一個
  • MVC:MVC把軟件系統分為三個部分:Model,View,Controller。MVC有低耦合性、高重用性、可維護性等優點
  • 代理模式:代理模式就是實現消息傳遞的一種機制,委托方有一些任務自己不想完成,但是還需要要實現,則將該任務存放到協議中,由代理完成.但是代理并不會主動的執行任務,需要委托方通知代理,然后代理完成委托方交給的任務.
  • 觀察者模式:經典觀察者模式定義了一種一對多的依賴關系,讓多個觀察者對象同時監聽某一個主題對象。這個主題對象在狀態上發生變化時,會通知所有觀察者對象,使它們能夠自動更新自己或者做出相應的一些動作。比如KVO,通知中心

九. 是否使用過CoreText或者CoreImage等?如果使用過,請談談你使用CoreText或者CoreImage的體驗?

用過
CoreText是用于處理文字和字體的底層技術。Quartz能夠直接處理字體(font)和字形(glyphs),將文字渲染到界面上,它是基礎庫中唯一能夠處理字形的模塊。因此,CoreText為了排版,需要將顯示的文本內容、位置、字體、字形直接傳遞給Quartz。相比其它UI組件,由于CoreText直接和Quartz來交互,所以它具有高速的排版效果。
coreImage是IOS5中新加入的一個Objective-c的框架,提供了強大高效的圖像處理功能,用來對基于像素的圖像進行操作與分析. iOS提供了很多強大的濾鏡(Filter),其中IOS5中有48種,而到了最新的IOS6 Filter已經增加到了93種之多,并且這一數字會繼續增加。這些Filter提供了各種各樣的效果,并且還可以通過濾鏡鏈將各種效果的Filter疊加起來,形成強大的自定義效果,如果你對該效果很滿意,還可以子類化濾鏡

十. POST、GET的區別?

POST:將參數放在請求體中,參數的大小原則上沒有限制一般傳輸的數據包含隱私相關的用POST
GET:將參數附加在URL后面,因為URL長度的限制,所以參數的大小是有限制的,通常不能超過1KB
GET 在請求URL后面以?的形式跟上發給服務器的參數,多個參數之間用&隔開


純手動 有地方是個人理解 有誤的地方希望大家能給指出 謝謝
如果對您有幫助 希望能給個關注和喜歡~~~
大家面試中遇到的問題 也可以留言分享

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • *面試心聲:其實這些題本人都沒怎么背,但是在上海 兩周半 面了大約10家 收到差不多3個offer,總結起來就是把...
    Dove_iOS閱讀 27,205評論 30 471
  • 1.屬性readwrite,readonly,assign,retain,copy,nonatomic 各是什么作...
    曾令偉閱讀 1,078評論 0 10
  • 一. CALayer和UIView的區別聯系 1 UIView是UIKIt的只能在iOS使用, CALayer是Q...
    yhj0129閱讀 1,666評論 0 1
  • 1.Difference between shallow copy and deep copy? 淺復制和深復制的...
    用心在飛閱讀 1,023評論 0 9
  • 1,NSObject中description屬性的意義,它可以重寫嗎?答案:每當 NSLog(@"")函數中出現 ...
    eightzg閱讀 4,185評論 2 19