1.+load和+initialize的區(qū)別是什么?
解析:學習一個方法, 主要從兩方面入手.第一是,這個方法什么時候調用,第二它的作用是什么.
- ①load
什么時候調用:當程序一啟動,就會把所有類加載進內存,只要一個類加載進內存,就會調用這個類的load方法.
調用次數(shù):只會調用一次
作用:初始化類的操作 - ②initialize
什么時候調用:當?shù)谝淮问褂眠@個類或者它的子類就會調用
調用次數(shù):有可能會調用多次,比如說這個類有一個子類,第一次使用這個子類的時候,會調用2次.
作用:初始化類的操作
2.runtime實現(xiàn)的機制是什么,有哪些用法夸政,一般用于干嘛?
是什么?
- runtime是運行時機制.它是一套比較底層的純C語言API,屬于一個語言庫,包含了很多底層的C語言API.
- 平時編寫的OC代碼,在程序運行中,其實最終都是轉成了runtime的C語言代碼,runtime算是OC的幕后工作者.
** 有哪些用法?**
- ①發(fā)送消息
- ②交換方法(系統(tǒng)自帶的方法功能不夠这难,給系統(tǒng)自帶的方法擴展一些功能邑贴,并且保持原有的功能)
- ③動態(tài)創(chuàng)建一個類(比如KVC底層實現(xiàn))
- ④動態(tài)添加方法(如果一個類方法非常多励幼,加載類到內存的時候也比較耗費資源体啰,需要給每個方法生成映射表否灾,可以使用動態(tài)給某個類窃蹋,添加方法解決)
- ⑤字典轉模型
3.什么時候會發(fā)生EXC_BAD_ACCESS異常准潭?
指向僵尸對象(不可用內存)的指針 給野指針發(fā)消息會報EXC_BAD_ACCESS錯誤
4.category和extension的區(qū)別
解析
先闡述一下這兩個詞的意思,再分別說下這兩個類的作用 和使用場景 就OK了
- category:分類
1.作用:給一個類擴展一些方法,不能擴展屬性
2.使用場景: 擴展系統(tǒng)的類 - extension:類目,類擴展,匿名分類
1.作用:擴充屬性和方法聲明
2.使用場景: 擴展自定義類
5.你是怎么理解bounds的
解析
遇到這種不好回答的問題,首先說出它的字面意思
- 1.內容:每個控件都有自己的內容,一個控件子控件都是相對于內容
- 2.bounds可以設置控件尺寸
- 3.bounds描述一塊區(qū)域,描述的是可視范圍在內容的區(qū)域
- 4.修改Bounds的x,y,不會影響當前控件在父控件位置,本質修改的是內容原點
6.UICollectionView使用步驟?
- 1.初始化布局 流水布局
- 2.設置數(shù)據(jù)源
- 3.注冊cell
- 4.自定義cell
7.簡述你對協(xié)議的理解?
解析
怎么去使用這個知識點 (這是初學者一般這么回答,low);
為什么要使用協(xié)議 (思想),什么時候才需要使用協(xié)議 (開發(fā)場景)
- 1.有時候自己不想做的事情,搞一個代理去管理,這時候只要代理遵守了某個協(xié)議,就能成為我代理.
- 2.UIScrollView,監(jiān)聽UIScrollView滾動,這時候需要遵守UIScrollView協(xié)議
注意點:代理一定要記得實現(xiàn)方法.
8.UITabBarController控制器中view的內部結構
- 它view內部的結構為一個專門存放子控制器View的View,和一個UITabBar條.
注意:UITabBar的高度為49.
UI基礎考點
1.通過代碼如何自定義控件? 并且簡單的描述下每一個步驟的理由?
- 1.新建一個繼承UIView的類,(所謂自定義控件就是繼承系統(tǒng)自帶的控件寫一個自己的控件)
- 2.在
initWithFrame
方法中添加子控件(保證別人在外面不管是通過init
還是initWithFrame
創(chuàng)建都能夠添加子控件,因為init
方法內部會調用initWithFrame
- 3.在
layoutSubViews
方法中設置子控件的frame(因為在InitWithFrame方法中當前控件尺寸可能沒值,所以計算不了子控件的位置和尺寸,而在layoutSubViews
方法,能夠拿到當前控件的尺寸) - 4.提供一個模型屬性者铜,重寫模型屬性的set方法(保證在別人在設置數(shù)據(jù)的那一刻就可以拿到數(shù)據(jù)設置到對應的子控件上)
2.通過XIB如何自定義控件? 并且簡單的描述下每一個步驟的理由?
- 1.新建一個繼承UIView的類,(所謂自定義控件就是繼承系統(tǒng)自帶的控件寫一個自己的控件)
- 2.新建一個xib文件(xib的文件名最好和類名一樣)
- 3.修改最外面那個控件的class為控件類名(只有修改類名,當時候從xib中出來的才是我這種類型的控件)
- 4.提供一個模型屬性腔丧,重寫模型屬性的set方法(保證在別人在設置數(shù)據(jù)的那一刻就可以拿到數(shù)據(jù)設置到對應的子控件上)
3.用一個屬性引用UI控件的時候為什么用weak?
- 因為UI控件添加到父控件中以后,會有強指針指向這個對象.在搞一個屬性引用這個對象,用弱引用就可以.
4.簡述UITableView性能優(yōu)化的原理?
- 當滾動列表時,部分UITableViewCell會移出窗口作烟,UITableView會將窗口外的UITableViewCell放入一個對象池中愉粤,等待重用。當UITableView要求dataSource返回UITableViewCell時俗壹,dataSource會先查看這個對象池科汗,如果池中有未使用的UITableViewCell,dataSource會用新的數(shù)據(jù)配置這個UITableViewCell绷雏,然后返回給UITableView头滔,重新顯示到窗口中怖亭,從而避免創(chuàng)建新對象.