1解釋self = [super init]方法
其實就是容錯處理奖磁,當父類初始化失敗渐裂,會返回一個nil,表示初始化失敗霉翔。由于繼承的關系,子類是需要擁有父類的實例和行為苞笨,必須先初始化父類债朵,再初始化子類
2線上App崩潰
方法一,在源生代碼中修改瀑凝,提交
方法二序芦,利用第三方平臺,JSPatch ?使用JS調(diào)用oc源生接口粤咪,替換任意OC方法谚中,我的認識就是可以不通過重新上架app項目到appStore就可以修改oc代碼
3App中混合H5開發(fā),優(yōu)缺點:
方法一:使用UIWebView或者WKWebView(ios8以后)
通過UIWebView代理方法攔截寥枝,判斷scheme是否是約定好的宪塔,調(diào)用本地API是哪
shouldStartLoadWithRequest
方法二:ios7以后,直接通過JavaScriptCore庫囊拜,通過往JS DOM注入對象(某個類的實例)
優(yōu)缺點:加入h5某筐,比原生要慢很多,體驗不好冠跷;可以實現(xiàn)嵌入別的功能入口南誊,可以隨時更改,不用更新版本就可以上線
4static
函數(shù)體內(nèi)蜜托,作用范圍是該函數(shù)體抄囚,該變量的內(nèi)存只被分配一次,下次調(diào)用時仍然維持上次的值橄务;模塊內(nèi)是全局變量幔托,可以被模塊內(nèi)的所有函數(shù)訪問,外部不行
5地圖和定位:
定位仪糖,創(chuàng)建位置管理器請求用戶授權柑司;請求目的地和當前位置的針線;創(chuàng)建渲染物對象在mapView代理方法中根據(jù)折現(xiàn)創(chuàng)建渲染物锅劝,并設置顏色
6常見的Http狀態(tài)碼:302請求重定向攒驰;304網(wǎng)頁自請求者上次請求后沒有更新,可以節(jié)省帶寬
500以上是服務器錯 故爵;400以上是請求鏈接錯誤或者找不到服務器玻粪;200以上是用戶成功獲取到了請求的文件隅津,正確;100以上是請求接受成功‘
7isa指針指向什么
每一個對象內(nèi)部都有isa指針劲室,這個指針指向它真正的真是類型伦仍,根據(jù)這個指針就能知道將來調(diào)用哪個類的方法
8觸摸事件的傳遞:
觸摸事件的傳遞是從父控件傳遞到子控件,如果父控件不能接收觸摸事件很洋,那么子控件就不可能接收到觸摸事件充蓝,不能接收觸摸事件的四種情況:不接收用戶交互userInteractionEnabled = NO;隱藏hidden = YES;透明alpha <= 0.01;未啟用enabled = NO;
9事件響應者鏈
如果當前view是控制器的view,那么就傳遞給控制器喉磁,如果控制其不在谓苟,則將其傳遞給它的父控件,在視圖層次結(jié)構(gòu)最頂層視圖也不能處理接收到的事件或消息协怒,將事件或消息傳遞給UIWindow對象進行處理涝焙;如果UIWindow對象也不能處理,將事件或消息傳遞給UIApplication對象孕暇,如果UIApplication也不能處理對象或消息仑撞,則將丟棄掉
10UITableView的復用機制
每次創(chuàng)建cell的時候,通過dequeueReusableCellWithIdentifier:方法創(chuàng)建cell妖滔,先到緩存池中找指定標識的cell隧哮,如果沒有直接返回nil,如果沒有找到標識的cell座舍,會通過initWithStyle:reuseIdenitifier:創(chuàng)建一個cell近迁,當cell離開界面的時候,會被放到緩存池中簸州,供下次使用
11沙盒目錄
Application:存放程序源文件鉴竭,上架前經(jīng)過數(shù)字簽名,上架后不可以更改
Documents:常用目錄岸浑,iClound備份目錄搏存,存數(shù)據(jù)
Library:
Caches:存放體積大又不需要備份的數(shù)據(jù)
Preference:設置目錄,iCloud會備份設置信息
tmp:存放臨時文件矢洲,不會被備份璧眠,這個文件下的數(shù)據(jù)有隨時被清除的可能
12pushViewController和presentViewController有什么區(qū)別
兩個都是在多個視圖控制器里跳轉(zhuǎn)的函數(shù)
presentViewController提供是一個模態(tài)視圖控制器(modal)
pushViewController提供一個棧控制器數(shù)組读虏,push/pop
13UIView和CALayer是什么關系
UIView顯示在屏幕上歸功于CALayer责静,通過調(diào)用drawRect方法渲染自身的內(nèi)容,調(diào)節(jié)CALayer屬性可以調(diào)整UIView的外觀盖桥,UIView繼承UIResponder灾螃,比起CALayer可以影響用戶事件,ios6之后揩徊,可以方便的通過視圖調(diào)試功能查看圖層之間的關系
UIView是ios系統(tǒng)界面中元素的基礎腰鬼,所有的界面元素都繼承它嵌赠,內(nèi)部是由Core Animation 來實現(xiàn),它的真正的繪圖部分熄赡,是由一個叫做CALayer(core Animation Layer)的類管理姜挺。UIView本身,訪問有關繪圖和坐標有關的屬性彼硫,frame/bounds炊豪,實際上內(nèi)部都是訪問CALayer的相關屬性
14
淺拷貝和深拷貝的區(qū)別:
淺Copy:可以理解為指針的復制,只是多了一個指向這塊內(nèi)存的指針拧篮,共用一塊內(nèi)存溜在。
深Copy:理解為內(nèi)存的復制,兩塊內(nèi)存是完全不同的他托,也就是兩個對象指針分別指向不同的內(nèi)存,互不干涉仆葡。
15drawRect方法:
只有在此方法中赏参,系統(tǒng)才能獲取到上下文環(huán)境 ?; rect參數(shù)是繪圖上下文的大醒刂选把篓;drawRect方法在view顯示的時候調(diào)用一次
重繪:【self setNeedsDisplay]; ? 系統(tǒng)會幫助調(diào)用drawRect方法,清除掉原來的腰涧,再繪制新的
[self setNeedsDisplayInRect:CGRect]; 固定區(qū)域的重繪
不能手動調(diào)用韧掩,否則獲取不到
16app崩潰 收集問題
使用騰訊的bugly ?輸入程序id 關聯(lián)進去,然后程序員查看崩潰日志
17動畫:分為顯示動畫和隱式動畫
在UIView上的事顯示動畫窖铡,不用我們手動去開啟疗锐,只要直接調(diào)用animation的接口就可以了。
在CALayer上的動畫叫隱式動畫费彼,需要我們?nèi)ナ謩娱_啟滑臊,隱式動畫分為三種,屬性動畫箍铲,組動畫和轉(zhuǎn)場動畫雇卷,屬性動畫又分為基礎動畫和幀動畫,幀動畫需要指定路徑
隱式動畫有隱式代理:動畫的開始和動畫的結(jié)束
18字符串使用copy
如果不使用copy颠猴,
@property(nonatomic,strong)NSString *str;
NSMutableString *string = [NSMutableString string];
[string appendString:@"hello"];
self.str = string;
NSLog(@"%@",self.str);
[string appendString:@"world"];
NSLog(@"%@",self.str);
}
NSString中copy的問題[3807:239891] hello
NSString中copy的問題[3807:239891] helloWorld
我們只給self.str附了一次值,但是self.str 的值改變了,這是因為把可變字符的地址指向了str,所以string的值改變了,self.str也跟著改變,
改為copy后关划,保證了在代碼中數(shù)據(jù)的安全。 ?不可變不會有這種問題
19因為+load是在類被初始化時候就被調(diào)用的翘瓮。+initialize是在收到消息之后才調(diào)用贮折,如果應用不發(fā)送消息給它,它就永遠不可能執(zhí)行
20這個寫法會出什么問題:@property (copy) NSMutableArray *array;
NSMutableArray用copy修飾有時就會crash,因為對這個數(shù)組進行了增刪改操作,而copy后的數(shù)組變成了不可變的NSArray,沒有響應的增刪改方法,所以對其進行增刪改操作就會報錯
21 簡述你對UIView资盅、UIWindow和CALayer的理解
UIWindow對象是所有UIView的根脱货,管理和協(xié)調(diào)的應用程序的顯示岛都。UIWindow類是UIView的子類,可以看作是特殊的UIView振峻。一般應用程序只有一個UIWindow對象臼疫,即使多個UIWindow對象,也只有一個UIWindow可以接受到用戶的觸屏事件扣孟。
UIView是用來顯示內(nèi)容的烫堤,可以處理用戶事件。
CALayer是用來繪制內(nèi)容的凤价,對內(nèi)容進行動畫處理依賴與UIView來進行顯示鸽斟,不能處理用戶事件。
UIView和CALayer是相互依賴的關系利诺。UIView依賴與calayer提供的內(nèi)容富蓄,CALayer依賴uivew提供的容器來顯示繪制的內(nèi)容。歸根到底CALayer是這一切的基礎慢逾,如果沒有CALayer立倍,UIView自身也不會存在,UIView是一個特殊的CALayer實現(xiàn)侣滩,添加了響應事件的能力口注。UIView來自CALayer,高于CALayer君珠,是CALayer高層實現(xiàn)與封裝寝志。UIView的所有特性來源于CALayer支持。