一拧篮、怎么解決緩存池滿的問題(cell)
ios中不存在緩存池滿的情況,因?yàn)橥ǔN覀僫os中開發(fā),對象都是在需要的時候才會創(chuàng)建,有種常用的說話叫做懶加載爽丹,還有在UITableView中一般只會創(chuàng)建剛開始出現(xiàn)在屏幕中的cell,之后都是從緩存池里取辛蚊,不會在創(chuàng)建新對象粤蝎。緩存池里最多也就一兩個對象,緩存池滿的這種情況一般在開發(fā)java中比較常見袋马,java中一般把最近最少使用的對象先釋放初澎。
二、CAAnimation的層級結(jié)構(gòu)
三虑凛、UIButton與 UITableView的層級結(jié)構(gòu)
· 繼承結(jié)構(gòu)
· 內(nèi)部的子控件結(jié)構(gòu)
四碑宴、如何渲染自定義格式字符串的 UILabel
通過NSAttributedString類
五 、設(shè)置scroll view的contensize 能在Viewdidload里設(shè)置么,為什么
能
六桑谍、按鈕或者其它 UIView控件的事件傳遞的具體過程
觸摸事件的傳遞是從父控件傳遞到子控件也就是UIApplication->window->尋找處理事件最合適的view
注 意: 如果父控件不能接受觸摸事件墓懂,那么子控件就不可能接收到觸摸事件
應(yīng)用如何找到最合適的控件來處理事件?
1.首先判斷主窗口(keyWindow)自己是否能接受觸摸事件
2.判斷觸摸點(diǎn)是否在自己身上
3.子控件數(shù)組中從后往前遍歷子控件霉囚,重復(fù)前面的兩個步驟(所謂從后往前遍歷子控件,就是首先查找子控件數(shù)組中最后一個元素匕积,然后執(zhí)行1盈罐、2步驟)
4.view,比如叫做fitView闪唆,那么會把這個事件交給這個fitView盅粪,再遍歷這個fitView的子控件,直至沒有更合適的view為止悄蕾。
5.如果沒有符合條件的子控件票顾,那么就認(rèn)為自己最合適處理這個事件,也就是自己是最合適的view帆调。
UIView不能接收觸摸事件的三種情況:
- 不允許交互:userInteractionEnabled = NO
- 隱藏:如果把父控件隱藏奠骄,那么子控件也會隱藏,隱藏的控件不能接受事件
- 透明度:如果設(shè)置一個控件的透明度<0.01番刊,會直接影響子控件的透明度含鳞。alpha:0.0~0.01為透明。
注 意:默認(rèn)UIImageView不能接受觸摸事件芹务,因?yàn)椴辉试S交互蝉绷,即userInteractionEnabled = NO鸭廷。所以如果希望UIImageView可以交互,需要設(shè)置UIImageView的userInteractionEnabled = YES熔吗。
史上最詳細(xì)的iOS之事件的傳遞和響應(yīng)機(jī)制-原理篇
七辆床、控制器 View的生命周期及相關(guān)函數(shù)是什么?你在開發(fā)中是如何用的桅狠?
- 1.首先判斷控制器是否有視圖讼载,如果沒有就調(diào)用loadView方法創(chuàng)建:通過storyboard或者代碼;
- 2.隨后調(diào)用viewDidLoad垂攘,可以進(jìn)行下一步的初始化操作维雇;只會被調(diào)用一次;
- 3.在視圖顯示之前調(diào)用viewWillAppear晒他;該函數(shù)可以多次調(diào)用吱型;
- 4.視圖viewDidAppear
- 5.在視圖消失之前調(diào)用viewWillDisappear;該函數(shù)可以多次調(diào)用陨仅;
如需要)津滞; - 6.在布局變化前后,調(diào)用viewWill/DidLayoutSubviews處理相關(guān)信息灼伤;
八触徐、簡單說一下時間響應(yīng)的流程?
①一個 UIView 發(fā)出一個事件之后狐赡,首先上傳給其父視圖;②父視圖上傳給其所在的控制器;③如果其控制器對事件進(jìn)行處理撞鹉,事件傳遞將終止,否則繼續(xù)上傳父視圖;④直到遇到響應(yīng)者才會停止颖侄,否則事件將一直上傳鸟雏,直到 UIWindow。
九览祖、UIscrollVew用到了什么設(shè)計(jì)模式孝鹊?還能再foundation庫中找到類似的嗎?
模板模式展蒂,所有 datasource 和 delegate 接口都是模板模式的典型應(yīng)用又活,組合模式composition,所有的 containerview 都用了這個模式觀察者模式 observer锰悼,所有的 UIResponder 都用了這個模式
十柳骄、動態(tài)綁定—在運(yùn)行時確定要調(diào)用的方法
動態(tài)綁定將調(diào)用方法的確定也推遲到運(yùn)行時。在編譯時箕般,方法的調(diào)用并不和代碼綁定在一起夹界,只有在消實(shí)發(fā)送出來之后,才確定被調(diào)用的代碼。通過動態(tài)類型和動態(tài)綁定技術(shù)可柿,您的代碼每次執(zhí)行都可以得到不同的結(jié)果鸠踪。運(yùn)行時因子負(fù)責(zé)確定消息的接 收者和被調(diào)用的方法。運(yùn)行時的消息分發(fā)機(jī)制為動態(tài)綁定提供支持复斥。當(dāng)您向一個動態(tài)類型確定了的對象發(fā)送消息時营密,運(yùn)行環(huán)境系統(tǒng)會通過接收者的 isa 指針定位對象的類,并以此為起點(diǎn)確定被調(diào)用的方法目锭,方法和消息是動態(tài)綁定的评汰。而且,您不必在 Objective-C 代碼中做任何工作痢虹,就可以自動獲取動態(tài)綁定的好處被去。