問題:
1.如何實(shí)現(xiàn)多代理回調(diào)缘揪,并且多個(gè)代理的方法都要執(zhí)行?
創(chuàng)建中間橋接類(代理的容器類)屯耸,橋接類定義單獨(dú)的代理對象屬性 ?vc提供adddelegate的方法以及存儲橋接類的數(shù)組,回調(diào)的時(shí)候遍歷存儲橋接類的數(shù)組,依次執(zhí)行協(xié)議方法豺型。
2.事件分發(fā)原理固蚤,手勢傳遞過程
只有繼承與uiresponder的對象能夠響應(yīng)事件touch對應(yīng)的api她混,事件產(chǎn)生后被加到uiapplication管理的事件隊(duì)列中联贩,由它來由里往外遞漫仆,window-view-subview,遞歸傳遞(找到view之后調(diào)用hittest:查找view的子view)泪幌,找到最合適的view(響應(yīng)鏈第一響應(yīng)者)后調(diào)用touches方法對事件進(jìn)行響應(yīng)盲厌,如果沒有重寫將事件沿著響應(yīng)者鏈往上拋(由外往里拋一直到uiapplication,與事件傳遞相反)祸泪,手勢識別器會延遲事件向所綁定的視圖傳遞吗浩,優(yōu)先去識別手勢處理touch事件
3.sd圖片存儲過期時(shí)間在什么時(shí)機(jī)設(shè)置?(有效時(shí)間設(shè)置)
下載結(jié)束實(shí)例化webimage的時(shí)浴滴,sdimagecache中有變量表示圖片緩存的最大值和過期時(shí)間
4.kvo能監(jiān)聽數(shù)組么拓萌?
可以監(jiān)聽可變數(shù)組的長度變化,但是不能監(jiān)聽到數(shù)組里面某一個(gè)對象的變化升略,不能使用array addobject的方式添加,要使用array [mutableArrayValueForKeyPath:@“dataArray”]
5.gcd的源碼理解
注意常用的幾個(gè)api屡限,匯總group,順序執(zhí)行barrir
6.masonry如何使用鏈?zhǔn)秸Z法對autolayout進(jìn)行封裝的品嚣?
make.centerX.mas……()點(diǎn)語法實(shí)現(xiàn),通過屬性的方式實(shí)現(xiàn)多級的調(diào)用,調(diào)用的方法是對象的block屬性钧大。將block作為屬性進(jìn)行訪問翰撑、block的返回參數(shù)是自定義對象
7.如何自己實(shí)現(xiàn)cell高度緩存,autolayout使用系統(tǒng)計(jì)算高度有什么問題啊央?
tableview設(shè)置了UITableViewAutomaticDimension之后autolayout會自動計(jì)算cell的高度但是不會緩存這個(gè)高度值眶诈,在cellforrowatindexpath中計(jì)算高度做緩存。cellforrow與heightforrow的調(diào)用順序:設(shè)置了預(yù)估高度前者在前瓜饥、否則后者在前會輪訓(xùn)一遍計(jì)算contentsize
8.tableview優(yōu)化逝撬,設(shè)置透明度是怎么影響gpu性能的?
tableview的cell復(fù)用乓土,緩存cell的高度不用每次都要計(jì)算宪潮,計(jì)算的時(shí)候放在異步線程中,圖片異步加載趣苏,緩存資源狡相,懶加載,布局的時(shí)候不要太多層級食磕,不要動態(tài)的添加subview提前添加完畢然后控制顯影 因?yàn)槊看翁砑又髸匦虏季謅utolay消耗性能尽棕,減少繪圖操作;預(yù)渲染圖像彬伦,不要使用透明背景會導(dǎo)致混合操作(gpu負(fù)責(zé))滔悉,這個(gè)過程很耗時(shí)
9.iOS9之前tableview的代理為啥用assign伊诵?
之前的delegate需要在dealloc中對代理設(shè)置為nil,
assign修飾delegate不對引用計(jì)數(shù)操作氧敢,使用之后沒有設(shè)置為nil可能會產(chǎn)生野指針日戈,而weak會自動設(shè)置為nil。
10.runtime使用場景有哪些孙乖?
方法交換浙炼,獲取屬性列表方法列表,動態(tài)創(chuàng)建類創(chuàng)建屬性唯袄。弯屈。。
11.jsonmodel實(shí)現(xiàn)細(xì)節(jié)
12.如何避免外界通過kvc訪問成員變量恋拷?
將accessInstanceVariablesDirectlygetter方法返回NO资厉,
kvc本質(zhì)上是操作方法列表以及在內(nèi)存中查找實(shí)例變量,可以利用此特性訪問類的私有變量蔬顾。
14.coretext宴偿,coreimage如何使用
15.gcd如何去取消一個(gè)正在執(zhí)行的請求任務(wù)
ios8之后可以調(diào)用dispatch_block_cancel來取消還沒有執(zhí)行的任務(wù)
模擬NSOperationQueue定義外部變量,用來標(biāo)記block是否需要取消诀豁,即外部變量為NO時(shí)窄刘,可以在block里面返回(感覺這個(gè)操作沒什么意義)
16.NSOperationQueue 添加的任務(wù)默認(rèn)是怎么執(zhí)行,同步還是異步
可設(shè)置優(yōu)先級(operation設(shè)置完依賴之后再比較優(yōu)先級)舷胜,并發(fā)數(shù)量
NSOperation默認(rèn)是同步執(zhí)行娩践,將operation添加到隊(duì)列中是異步執(zhí)行的,給operation添加依賴 addDependency烹骨,即在其他operation執(zhí)行完之后在執(zhí)行
17.[obj someMethod]翻伺,oc方法調(diào)用的原理是什么?
oc中方法調(diào)用最終轉(zhuǎn)換成runtime的c語言函數(shù)objc_msgSend(id receiver沮焕,SEL op吨岭,),信息發(fā)送后會在receiver類對象的方法列表中找這個(gè)方法遇汞。
首先去該類的cache中查詢未妹,找到返回;沒找到就去methodlist中查找空入,找到就將方法的IMP返回并將IMP存入cache中络它;如果還沒有找到,通過super_calss找到父類歪赢,在父類的methodlist中查找化戳;如果父類中沒有找到進(jìn)行動態(tài)決議和消息轉(zhuǎn)發(fā);如果動態(tài)決議和消息轉(zhuǎn)發(fā)返回NO和nil,就拋出異常
18.NSOperationQueue 中的串行指的是最大并發(fā)數(shù)為1点楼,默認(rèn)是-1即并行
19.NSOperationQueue中執(zhí)行完A扫尖,B 再去執(zhí)行C任務(wù)如何實(shí)現(xiàn)
可以對任務(wù)設(shè)置依賴
20.靜默推送
iOS7之后在后臺任務(wù)增加了特性:后臺獲取、推送喚醒掠廓、后臺傳輸换怖。
需求:在應(yīng)用退到后臺時(shí)某一個(gè)時(shí)間點(diǎn)喚醒設(shè)備更新UI,在用戶下次點(diǎn)擊應(yīng)用圖標(biāo)進(jìn)入應(yīng)用的時(shí)候就能看到已經(jīng)更新好的UI了蟀瞧。
后臺的格式:增加content-available字段并設(shè)成1沉颂;alert字段必須為空否則收到的就不是靜默推送;sound字段不影響靜默推送悦污,看需求是否需要铸屉。
總結(jié):相當(dāng)于應(yīng)用在后臺的時(shí)候app中收到推送回調(diào),在沒有打開app的前提下去做一些操作切端,例如刷新UI等彻坛,Xcode中需要設(shè)置remote notifications
21.用c創(chuàng)建的對象arc下需要自己去釋放嗎?
用free()去釋放
22.udp服務(wù)器如何發(fā)送消息踏枣,是否是面向連接
23.項(xiàng)目中遇到哪些難題昌屉,上架是否遇到過問題?
項(xiàng)目難題:
上架問題:啟動圖片含有蘋果的logo直接被打回茵瀑;
上架勾選了內(nèi)購但是沒有開發(fā)內(nèi)購功能怠益;符合內(nèi)購的功能模塊確使用了第三方支付;
24.混合開發(fā)時(shí)瘾婿,客戶端的登錄狀態(tài)如何同步到h5頁面?
可以通過webjsbridge約定一個(gè)方法烤咧,在app登錄成功的時(shí)候通知h5去登錄
app中的登錄信息其實(shí)就是一個(gè)token值偏陪,可以將token或者用戶id傳遞給h5.
傳遞之前清理一下h5的地址對應(yīng)的cookie(遍歷cookie單例找到改url對應(yīng)cookie并刪除);
加載html的時(shí)候講token通過cookie傳遞過去(在包裝request的時(shí)候設(shè)置進(jìn)去)煮嫌;
25.weak的原理是什么笛谦,知道多少說多少?
weak是Runtime維護(hù)了一個(gè)hash(哈希)表昌阿,用于存儲指向某個(gè)對象的所有weak指針饥脑。weak表其實(shí)是一個(gè)hash(哈希)表,Key是所指對象的地址懦冰,Value是weak指針的地址(這個(gè)地址的值是所指對象指針的地址)數(shù)組灶轰。
26.wk與webview區(qū)別?
wkwebview有更多的h5特性刷钢,更高的滾動刷新率內(nèi)置手勢
27.autolayout布局的view笋颤,如何在自己.m文件中獲取寬高以便子視圖根據(jù)條件布局?
可以在layoutsubviews里面獲取
28.xr的適配 設(shè)備唯一標(biāo)示怎么獲取 不用uidevice 蘋果貌似禁止了内地?
注意安全區(qū)safeArea伴澄,設(shè)備尺寸宏定義赋除。[NSUUID UUID].UUIDString動態(tài)id,每次生成的id都不一樣非凌,udid/Mac地址/openudid 都被蘋果禁止了举农,蘋果不允許訪問用戶唯一的隱私數(shù)據(jù)。
29.表情是怎么實(shí)現(xiàn)的敞嗡,本地存儲颁糟?還有表情是如何展示的(圖文混排怎么做)?
本地需要兩個(gè)字典秸妥,表情圖片字典滚停、表情含義字典。圖文混排使用yykit
30.cache目錄下文件如何緩存的 跟tmp目錄下的文件有什么區(qū)別粥惧?
用戶生成的文件键畴、其他數(shù)據(jù)及其他程序不能重新創(chuàng)建的文件,應(yīng)該保存在/Documents目錄下面突雪,并將通過iCloud自動備份起惕,可以重新下載或者重新生成的數(shù)據(jù)保存在/Library /caches目錄下面,不備份咏删。
tmp下的文件系統(tǒng)會根據(jù)情況將其清空 可能是內(nèi)存不足的時(shí)候也可能是其他時(shí)候
31.ios怎么去管理一個(gè)線程的生命周期惹想?
可以監(jiān)控線程查看runloop處于什么mode
32.如何解決內(nèi)存暴漲問題?
創(chuàng)建對象的時(shí)候控制一次性創(chuàng)建的數(shù)量督函,創(chuàng)建完成回收該內(nèi)存空間
33.fmdb如何解決多線程問題嘀粱?
使用FMDatabaseQueue 思路是:創(chuàng)建一個(gè)隊(duì)列,然后將放入隊(duì)列的block順序執(zhí)行辰狡,這樣避免了多線程同時(shí)訪問數(shù)據(jù)庫;每個(gè)線程使用同一個(gè)Queue實(shí)例