1.xcode5和xcode7區別?
xcode7沒有Frameworks文件夾,xcode7內部會自動幫你導入一些常見的框架.
xcode7多了LaunchScreen.xib,LaunchScreen.xib設置啟動界面,而且可以確定模擬器或者真機的真實尺寸,如果沒有設置,默認4s的尺寸(320,480)
xcode7沒有pch文件
xcode5當中也有info.plist,只不過它的名字很長.是工程的名稱.
2.pch文件原理?
把pch里面的所有內容導入到每個文件中去
3.UIApplication常見功能?
1、設置應用提醒數字
2、設置連網狀態
3、設置狀態欄
4、跳轉網頁
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.
注意點:
一旦重寫了loadView,表示需要自己創建控制器的View.
如果控制器的View還沒有賦值,就不能調用控制器View的get方法.會造成死循環.
因為控制器View的get方法底層會調用loadView方法.
11.UIPickView是什么控件,基本用法怎樣的?
UIPickView選擇控件,用來供用戶選擇一些城市等.它的基本用法與tableView基本相似,要設置數據源,代理, 讓其展示數據
12.KVC底層實現?
拿字符串與當前類的屬性進行匹配.如果匹配到,就給該屬性賦值. [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當中存儲方式有哪些?
1、XML屬性列表(plist)
2、Preference(偏好設置)
3、NSKeyedArchiver,只有遵守NSCoding協議的對象才可以使用這種方式。
4、SQLite
5、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當中