iOS基礎筆試題-(2)

12. obj在編譯時和運行時分別時什麼類型的對象

以下面的代碼,obj在編譯時和運行時分別時什麼類型的對象:ios

參考答案:面試

在編譯時,咱們所聲明的objNSString *類型,所以是NSString類型對象。在運行時,因爲指針obj所指向的是NSData類型對象的內存,所以其實是NSData類型的對象。在編譯時,這一行代碼會轉換成相似這樣:設計模式

因爲在編譯時,轉換成id,所以能夠用NSString *指向NSData對象,而id是具有運行時特性的,所以在連接時,經過idisa指針能夠找到其所屬的類,所以最終類型仍是經過isa肯定其所屬類型。api

13. id聲明的對象有什麼特性?

id類型能夠指向任何類型的對象。數組

參考答案:安全

咱們先看看其定義:性能

可其定義可知id類型是一個指向objc_object結構體類型的指針,這個結構體只有一個指向對象無類的指針isa,所以id能夠指向任何類型的對象,故其具有運行時特性。測試

 

14. iOS設備性能測試

在實際開發中,咱們常常須要對應用瘦身,所以對性能的檢測是很重要的。spa

參考答案:線程

使用Profile-> Instruments ->Time Profiler能夠檢測性能。

15. Objective-C中有私有方法、私有變量麼?

我記得曾經我就被這麼問過,不知道你們有沒有遇到過。

參考答案:

在類的.m實現文件內聲明,就能夠做爲私有方法、私有變量。可是,並非絕對的私有,若是外部知道有這麼個方法,同樣能夠調用,並且不會報錯。就像蘋果公司沒有公開出來的API,只要咱們經過其它方式瞭解到api就能夠調用。因而蘋果審覈時常常因爲使用了私有api而打回來了。

 

16. 簡述tableview的重用機制

曾經筆者面試時,也被問到這個問題。

參考答案:

 

  • 這個方法就是重用機制的核心了。好比,有一個界面可顯示10個cell,那麼建立10次cell,並給cell指定一樣的重用標識(固然,能夠爲不一樣顯示類型的cell指定不一樣的標識)而且10個cell將所有都加入到visiableCells數組,reusableTableCells爲空.
  • 滾動tableView,當有一個cell徹底移出屏幕時,這個cell就會被加入到reusableTableCells。而新出現的那個cell將加入到visiableCells,而這個cell就是被重用的。

若是要讓tableview不重用,不設置reuseIdentifier就能夠了。

 

17. nil與NULL的區別

參考答案:

nilC語言的NULL相同,在objc/objc.h中定義。nil表示Objective-C對象的值爲空。在C語言中,指針的空值用NULL表示。在Objective-C中,nil對象調用任何方法表示什麼也不執行,也不會崩潰。

更詳細請閱讀筆者的文章:http://www.henishuo.com/nil-nil-null-nsnull-difference/

18. Category是什麼,什麼時候使用?

參考答案:

Category就是所謂的擴展。

有時咱們須要在一個已經定義好的類中增長一些方法,而不想去重寫該類,這時候使用擴展就很好。好比,當工程已經很大,代碼量比較多,或者類中已經有不少方法,已經有其餘代碼調用了該類建立對象並使用該類的方法時,可使用類別對該類擴充新的方法。

筆者所到公司之處,都會根據公司的UI風格定製一套UI組件,統一全局的風格。本人向來不喜歡用xib/storyboard開發,由於維護成本過高了。咱們不能經過繼承的方式定製各類組件吧?因此這個時候使用擴展是最佳時期。

19. 什麼是Delegate?經常使用場景?

參考答案:

Delegate就是所謂的代理,代理是一種設計模式。在iOS開發中,會使用到大量的代理,而代理設計模式是蘋果中的標準設置模式。

經常使用場景有反向傳值。好比:蘋果的藍牙,咱們進入到下一個界面去打開或者關閉藍牙,當操做以後須要將狀態反饋到前一個界面,並更新顯示。對於這種狀態,使用代理設計模式是很標準的模式。

20. 什麼是單例,如何設計單例?

參考答案:

單例就是全局都只有一個對象存在,並且是在整個App運行過程當中都存在。每一個App都會有單例,好比UIApplication。而咱們在作用戶數據存儲時,一般都會用單例存儲,由於應用在全部操做中,常常要求先登陸。

下面這種寫法是最經常使用的寫法,這個是線程安全的。

 

21. 什麼是通知?

參考答案:

iOS中,通知是很是經常使用的設計模式。它是多對多的關係。關於通知,因爲這一節比較重要,單獨寫成一篇文章,在個人隨筆中有詳細的解釋,感興趣的能夠前去看一看。

寫在最後

文章中不免有說得不合理的地方,若是您認爲說法不正確或者哪裏有錯誤的地方,請在評論中留言,筆者會在第一時間修正!!!

相關文章
相關標籤/搜索