整理一些重點(diǎn)和面試問到幾率比較大的題目給小伙伴
對(duì)您有幫助或者您喜歡的話 希望能點(diǎn)個(gè)贊或者添加一下關(guān)注
一. CALayer和UIView的區(qū)別聯(lián)系
- 1 UIView是UIKIt的只能在iOS使用, CALayer是QuartzCore的 iOS和mac os通用
- 2 CALayer比UIView更加輕量級(jí),但是可以實(shí)現(xiàn)同樣的效果
- 3 UIView的CALayer類似UIView的子View樹形結(jié)構(gòu)
- 4 UIView比CALayer多了一個(gè)事件處理功能,也就是說UIView能處理用戶觸摸
- 5 UIView有個(gè)重要的屬性layer,可以返回它的主CALayer實(shí)例.CALayer *layer = myView.layer
- 6 坐標(biāo)系統(tǒng): CALayer的坐標(biāo)系統(tǒng)比UIView多了一個(gè)anchorPoint屬性
- 7 UIView是iOS系統(tǒng)中界面的基本元素,所有的界面元素都是繼承自它.它本身完全是由CoreAnimation來實(shí)現(xiàn)的.它真正的繪圖部分,是由一個(gè)CALayer類來管理的.UIView本身更像是一個(gè)CALayer的管理權(quán),訪問它的跟繪圖和跟坐標(biāo)有關(guān)的屬性,如frame,bounds等,實(shí)際上內(nèi)部都是在訪問它所包含的CALayer的相關(guān)屬性.
layer可以設(shè)置圓角顯示 cornerRadius 也可以設(shè)置陰影 shadowColor 但是如果layer??中某個(gè)layer設(shè)置了圓角 ??中所有l(wèi)ayer的陰影效果將都不顯示.因此要死設(shè)置有圓角還要陰影,可以做兩個(gè)UIView重疊,一個(gè)layer顯示圓角一個(gè)layer顯示陰影 - 8 渲染 當(dāng)更新層 改變不能立即顯示在屏幕上.當(dāng)所有的層都準(zhǔn)備好時(shí),可以調(diào)用setNeedsDisplay方法來重繪顯示.
- 9 變換 要在一個(gè)層中添加一個(gè)3D或仿射變換,可以分別設(shè)置層的transform或者affineTransform屬性
- 10 變形Quartz Core的渲染能力 使二維圖像可以被自由的操縱,就像是三維的.圖像可以在一個(gè)三維坐標(biāo)系中以任意的角度被旋轉(zhuǎn) 縮放 和傾斜.CATransform3D的一套方法提供了一些魔術(shù)般的效果
二. 簡述同步和異步
同步:串行的執(zhí)行任務(wù) 異步:并行的執(zhí)行任務(wù).同步函數(shù)不具備開啟線程的能力,而異步函數(shù)具備
所謂同步,就是在發(fā)出一個(gè)調(diào)用時(shí),在沒有得到結(jié)果之前,該調(diào)用就不返回.但是一旦調(diào)用返回,就得到返回值了.也就是 由調(diào)用者主動(dòng)等待這個(gè)調(diào)用結(jié)果
而異步則是相反,調(diào)用在發(fā)出之后,這個(gè)調(diào)用就直接返回了,所以沒有返回結(jié)果.換句話說就是當(dāng)一個(gè)異步過程調(diào)用發(fā)出后懂傀,調(diào)用者不會(huì)立刻得到結(jié)果帝牡。而是在調(diào)用發(fā)出后母债,被調(diào)用者通過狀態(tài)、通知來通知調(diào)用者蛆楞,或通過回調(diào)函數(shù)處理這個(gè)調(diào)用.
三. 多線程安全怎么控制?
用互斥鎖,隊(duì)列組,柵欄函數(shù),依賴
四. 簡要說明什么時(shí)候使用繼承,什么時(shí)候使用類別
在OC中,一個(gè)類繼承另一個(gè)類,就是繼承了父類所有的屬性和方法,并且可以擴(kuò)充自己的屬性:而類別是在不改變?cè)蓄惖幕A(chǔ)上進(jìn)行方法擴(kuò)充;
因此,根據(jù)開發(fā)需求,如果這個(gè)類需要擴(kuò)充屬性,或者需要重寫系統(tǒng)的類的某些方法,用繼承;如果只是對(duì)一個(gè)類擴(kuò)充接口和模塊,使用類別更加方便.
五. 簡述蘋果的安全機(jī)制
- 數(shù)字簽名機(jī)制:在iOS中運(yùn)行的App必須 擁有自己的數(shù)字簽名,而數(shù)字簽名來與開發(fā)者的數(shù)字證書;開發(fā)者需要加入"iOS開發(fā)者計(jì)劃"才能獲取證書 而且其開發(fā)的App還要經(jīng)過嚴(yán)格的審查才能在AppStore上架,保證了App的安全;杜絕了第三方和未簽名App的運(yùn)行;
- 沙盒保護(hù)機(jī)制:這種機(jī)制使得設(shè)備內(nèi)的各個(gè)App之間無法直接進(jìn)行交流,只能通過iOS來進(jìn)行數(shù)據(jù)傳遞;雖然降低了系統(tǒng)的擴(kuò)展性但是卻保證了安全性;
- 不要使用越獄,否則蘋果的安全機(jī)制就功虧一簣;
- 只從AppStore獲取App;
- 第一次連接計(jì)算機(jī),不要隨意點(diǎn)"信任";
- 不要隨意給某個(gè)App設(shè)置隱私讀取權(quán)限;
六 關(guān)鍵字const有什么含意?修飾類呢?static的作用,用于類呢?還有extern c的作用?
當(dāng)使用 const修飾基數(shù)數(shù)據(jù)類型變量時(shí),該變量就變?yōu)槌A?進(jìn)入靜態(tài)區(qū)
-
當(dāng)使用const修飾指針類型變量時(shí):
- 當(dāng)使用const在指針類型兩邊,那么該指針變量指向的內(nèi)存空間的內(nèi)容就不能改變了,但指針的指向可以改變.
如果const在變量的左邊,那么該指針的指向不能改變了,而指向內(nèi)存空間的內(nèi)容可以改變
當(dāng)使用const修飾符時(shí),const NSSting *str,相當(dāng)于修飾該對(duì)象,表示對(duì)象是不可更改的.
static修飾變量,表示這個(gè)內(nèi)部全局變量,只能在本文件中訪問.系統(tǒng)會(huì)將該變量放進(jìn)靜態(tài)區(qū),它的生命周期被延長到了程序結(jié)束
static修飾類, 表示這個(gè)內(nèi)部的方法, 只能在本文件中訪問.
extern c表示聲明了一外部變量, 多個(gè)外部變量如果同名,實(shí)際指向的是同一塊存儲(chǔ)空間.
七. 類工廠方法是什么?
- 類工廠方法的實(shí)現(xiàn)是為了向客戶提供方便,它們將分配和初始化合在一個(gè)步驟中,返回被創(chuàng)建的對(duì)象,并進(jìn)行自動(dòng)釋放處理.這些方法的形式是+(type)className..其中className不包括任何前綴. 工廠方法可能不僅僅為了方便使用,它們不但可以將分配和初始化合在一起,還可以為初始化過程提供對(duì)象的分配信息.類工廠方法的另一個(gè)目的是使類提供單間實(shí)例.
八 UIView從出現(xiàn)到銷毀的過程?
-> loadView
-> viewDidLoad
-> viewWillAppear
-> viewWillLayoutSubviews
-> viewDidLayoutSubviews
-> viewDidAppear
-> viewWillDisappear
-> viewDidDisappear
九. 什么情況下回發(fā)生內(nèi)存泄漏和內(nèi)存溢出?
內(nèi)存溢出就是你要求分配的內(nèi)存超出了系統(tǒng)能給你的,系統(tǒng)不能滿足需求,于是就產(chǎn)生溢出.
內(nèi)存泄漏就是指你向系統(tǒng)申請(qǐng)分配內(nèi)存進(jìn)行使用,可以說使用完后沒有驚喜釋放,結(jié)果這塊內(nèi)存也無法分配給其他程序,稱之為內(nèi)存泄漏
內(nèi)存泄漏的累計(jì)危害非常大 最后會(huì)導(dǎo)致內(nèi)存溢出 程序閃退;
內(nèi)存泄漏分為四大類;
- 常發(fā)生內(nèi)存泄漏:發(fā)生內(nèi)存泄漏的代碼會(huì)被多次執(zhí)行到,每次被執(zhí)行的時(shí)候都會(huì)導(dǎo)致一塊內(nèi)存泄漏.
- 偶發(fā)生內(nèi)存泄漏.發(fā)生內(nèi)存泄漏的代碼只有在某些特定的壞境或者操作過程下才會(huì)發(fā)生;
- 一次性內(nèi)存泄漏.發(fā)生內(nèi)存泄漏的代碼只會(huì)被執(zhí)行一次,或者由于算法上的缺陷,導(dǎo)致總會(huì)有一塊僅且一塊內(nèi)存發(fā)生泄漏;
- 隱式內(nèi)存泄漏 程序在運(yùn)行的過程中不停的分配內(nèi)存, 但是直到結(jié)束的時(shí)候才釋放內(nèi)存,對(duì)于運(yùn)行周期很長的服務(wù)器,不及時(shí)釋放會(huì)耗盡內(nèi)存;
十 說說響應(yīng)者鏈條?
響應(yīng)者鏈條是一條由UIResponder的子類組成的鏈條,它們都能夠響應(yīng)時(shí)間,由事件的最佳相應(yīng)者起,如果它是控制器的view的話,它的上一級(jí)響應(yīng)者就是這個(gè)控制器,否則就是它的父控件;控制器的上一級(jí)響應(yīng)者是它父控制器的view,最終一直到window.
純手打 有錯(cuò)誤或者不對(duì)的地方希望大家能給指出
喜歡的小伙伴希望能給個(gè)贊 或者添加個(gè)關(guān)注