iOS基礎問答面試題連載(二)

1.xcode5和xcode7區別?

  • xcode7沒有Frameworks文件夾,xcode7內部會自動幫你導入一些常見的框架.
  • xcode7多了LaunchScreen.xib,LaunchScreen.xib設置啓動界面,並且能夠肯定模擬器或者真機的真實尺寸,若是沒有設置,默認4s的尺寸(320,480)
  • xcode7沒有pch文件
  • xcode5當中也有info.plist,只不過它的名字很長.是工程的名稱.

2.pch文件原理?

  • 把pch裏面的全部內容導入到每一個文件中去

3.UIApplication常見功能?

  • 設置應用提醒數字
  • 設置連網狀態
  • 設置狀態欄
  • 跳轉網頁

4.程序完整啓動流程?

  • 1.執行Main
  • 2.執行UIApplicationMain函數.
  • 3.建立UIApplication對象,並設置UIApplicationMain對象的代理.UIApplication的第三個參數就是UIApplication的名稱,若是指定爲nil,它會默認爲UIApplication.UIApplication的第四個參數爲UIApplication的代理.
  • 4.開啓一個主運行循環.保證應用程序不退出.
  • 5.加載info.plist.加載配置文件.判斷一下info.plist文件當中有沒有Main storyboard file base name,裏面有沒有指定storyboard文件,若是有就去加載info.plist文件,若是沒有,那麼應用程序加載完畢.

5.UIWindow是什麼?

  • UIWindow是一種特殊的UIView,一般在一個app中至少有一個UIWindow
  • iOS程序啓動完畢後,建立的第一個視圖控件就是UIWindow,接着建立控制器的view,
  • 最後將控制器的view添加到UIWindow上,因而控制器的view就顯示在屏幕上了
  • 一個iOS程序之因此能顯示到屏幕上,徹底是由於它有UIWindow

6.手動建立窗口的步驟?

  • 1.建立窗口,要有窗口顯示,必需要有強引用.窗口也是控件,要想展現出來.必須得要有尺寸.
  • 2.建立控制器
  • 3.設置控制器爲窗口的根控制器
  • 4.顯示窗口

7.makeKeyAndVisible作了哪些事情?

  • 讓窗口成爲顯示狀態.
  • 把根控制器的View添加到窗口上面.
  • 把當前窗口設置成應用程序的主窗口

8.如何從從StoryBoard加載控制器?

  • 加載指定的storyBoard
  • 加載箭頭所指向的控制器.
  • 加載指定標識的控制器.

9.initWithNibName的加載過程?

  • 若是沒有指定名稱.指定爲nil,那麼它就會去先加載跟它相同名稱的Xib.
  • 若是沒有跟它相同名稱的Xib,那麼它就會再去加載跟它相同名稱去點Controller的名字的Xib.- - 控制器的init方法會調用initWithNibName:方法.

10.LoadView 做用以及使用LoadView的注意點?

  • 控制器調用loadView方法建立控制器的view.它的默認作法是:
  • 先去判斷當前控制器是否是從StoryBoard當中加載的,若是是,那麼它就會從StoryBoard當中加載控制器的View.
  • 若是不是從StoryBoard當中加載的, 那麼它還會判斷是否是從Xib當中建立的控制器.若是是,那麼它就會從xib加載控制器的View.
  • 若是也不是從Xib加載的控制器.那麼它就會建立一個空的UIView.設爲當前控制器的View.php

    • 注意點:
      • 一旦重寫了loadView,表示須要本身建立控制器的View.
      • 若是控制器的View尚未賦值,就不能調用控制器View的get方法.會形成死循環.
        由於控制器View的get方法底層會調用loadView方法.

11.UIPickView是什麼控件,基本用法怎樣的?

  • UIPickView選擇控件,用來供用戶選擇一些城市等.它的基本用法與tableView基本類似,要設置數據源,代理, 讓其展現數據

12.KVC底層實現?

  • 拿字符串與當前類的屬性進行匹配.若是匹配到,就給該屬性賦值.
     
    1. [flagItem setValue:obj forKeyPath:key];
  • 1.會找有沒有跟key值相同名稱的set方法,若是有,就會調用set方法,把obj傳入
  • 2.若是說沒有set方法.那麼它會去找沒有相同名稱,而且帶有下劃線的成員屬性,若是有就會給該屬性賦值.
  • 3.若是也沒有帶有下劃線的成員屬性,就看有沒有跟它相同名稱的成員屬性,若是有就會給該屬性賦值.
  • 4.若是尚未跟它相同名稱的成員屬性,就會調用setValue:(id)value forUndefinedKey:
  • 5.若是沒有實現setValue: forUndefinedKey: 就直接報錯

13.導航控制器View的結構是怎樣的?

  • 一個專門存放棧頂控制器View的View
  • 一個導航條,導航條的高度爲44,Y值爲20

14.導航push作了哪些事情?

  • 當調用push方法時, 會把要push的控制器添加到導航控制器管理的棧中,把以前導航控制器中棧頂控制器View給移除,把當前棧頂控制器添加上去.

15.導航pop作了哪些事情?

  • 當調用pop方法時, 會把要pop的控制器從棧裏移除,把以前導航控制器中棧頂控制器View給移除,把當前棧頂控制器添加上去.

16.如何設置導航條的內容?

  • 導航條的內容由導航控制器的棧頂控制器的NavigationItem決定.

17.導航控制器pop操做有哪些?

  • 返回上一級
  • 返回到根控制器
  • 返回到指定的控制器.

18.文本框如何攔截用戶輸入?

  • 給指定的文件框,設置代理 ,實現代理方法.裏面包括是否容許開始編輯,是否容許結束編輯,是否容許改變字符等等.

19.如何自定義鍵盤?

  • 自定義鍵盤,要繼承系統的UITextField,設置文本框的一個屬性,該屬性名稱爲inputView.這樣就能夠把鍵盤定義成本身要想的View.

20.導航控制器的做用?

  • 導航控制器能夠輕鬆的完成控制器之間的切換.其操做有push,pop等.

21.自動跳轉與手動型跳轉區別?

  • 自動跳轉:經過控件直接拖線的方式進行跳轉
  • 手動跳轉:在跳轉以前要去作一些處理工做. 必須得要執行performSegueWithIdentifier:才能跳轉.

22.何時使用代理 ,代理的步驟?

  • 當一個對象發生某一件事時,想要把本身的東西傳給別人.或是通知別人作某事使用代理.
  • 使用場景: 上下級之間,一般是它的上一級成爲它的代理.
  • 步驟:
    • 1.定義協議
    • 2.定義代理屬性
    • 3.在.m文件當中調用代理方法
    • 4.設置代理
    • 5.遵照協議
    • 6.實現協議方法

23.ios當中存儲方式有哪些?

  • XML屬性列表(plist)
  • Preference(偏好設置)
  • NSKeyedArchiver,只有遵照NSCoding協議的對象纔可使用這種方式。
  • SQLite
  • Core Data

24.tableView性能優化

  • 1.tableView的緩存機制.
  • 2.在不等高Cell當中,提早計算Cell的行高.提早估一個行高.200-250
  • 3.若是說Cell當中有圓形圖片,圖片不要用ImageView加載layer.corneadius裁剪去作.會形成離屏渲染. 用繪圖Qurarzds裁剪,生成一張圓形的圖片.
  • 4.若是說圖片的寬高,指定爲小數點.會形成鋸齒,形成鋸齒就會致使離屏渲染
  • 5.cell當中的ImageView的大小最好是跟UIImage是同樣大,若是不同大 它會對UIImage作形變操做.cell當中展現都是小圖.小圖的大小跟ImageView 點擊放大,是再去用大的ImageView加載大圖.
  • 6.作tableView的時候必定要用真機.
  • 7.若是是從網絡加載數據,必定要放到子線程(異步加載)當中作.
  • 8.加載完畢的數據必定作本地緩存.
  • 9.cell當中不要動態的添加子控件.通常都在建立時,就把要出現的Cell給添加進去,暫時不要顯示的,可隱藏.
  • 10.儘可能減小Cell內部子控件的個數.
  • 11.若是控件很是多,把不須要與用戶進行交互的控件.能過異步繪製出來.生成一張圖片.把圖片添加到cell當中

你的回覆是個人動力

PDF2文件下載ios

 

原文:http://bbs.520it.com/forum.php?mod=viewthread&tid=2814xcode

相關文章
相關標籤/搜索