1.如何在OC中調(diào)用swift的文件裳朋?
步驟:直接托swift文件 --> 建立橋接頭文件 --> target --> building
setting--> 輸入product --> Packaging --> Project ModuleName
--> SwiftModule --> 在橋接頭文件里加入頭文件#import "SwiftModule-
swift.h"
作用: 此頭文件中就包含了所有.swift的文件
![]()
2.get和post的區(qū)別预明?
解答:
a.安全性問題:get請求的參數(shù)全部暴露在接口中寻狂,一般叫做明文請求或者是傻瓜式請
求,post請求的參數(shù)一般以字典的方式進(jìn)行拼接酣衷,相對于get比較安全
b.對文件大小的一個要求:get請求不允許向服務(wù)器上傳文件(圖片记罚,PDF,音視
頻)望迎,一般以post進(jìn)行上傳文件
c.如果從服務(wù)器獲取數(shù)據(jù)或者查詢數(shù)據(jù)使用get請求障癌,如果上傳數(shù)據(jù)到服務(wù)器或者修改
服務(wù)器上數(shù)據(jù)使用post
3.錯誤處理:unacceptable content-type: text/html?
解決方案:
manager.responseSerializer.acceptableContentTypes = NSSet(object: "text/html") as! Set < String >
4.了解:APPDelegate和viewController的生命周期
AppDelegate的生命周期:貫穿整個程序的從開始到結(jié)束的全過程
詳解:
application(程序啟動入口) --> applicationWillResignActive(將進(jìn)入活躍
狀態(tài))--> applicationDidBecomeActive(已經(jīng)進(jìn)入活躍狀態(tài)) -->
applicationDidEnterBackground(進(jìn)入后臺) -->
applicationWillEnterForeground(將進(jìn)入前臺) -->
applicationWillTerminate (程序?qū)⒈恢袛嗟?ViewController的生命周期:是指視圖View從加載到注銷加載的全過程
詳解:
init(創(chuàng)建視圖) --> loadView(開始加載)--> viewDidLoad(加載成功) -->
viewWillAppear(視圖將要出現(xiàn)) --> viweDidAppear(視圖顯示出來) -->
viewWillDisappear(視圖將要消失) --> viewDidDisappear(視圖已經(jīng)消失) -->
viewDidUnload(注銷加載) --> dealloc(被釋放)
參考文檔
5.SDWebImage在內(nèi)存中的實(shí)現(xiàn)原理辩尊?
作用:SDWebImage是用來加載網(wǎng)絡(luò)圖片的第三方庫涛浙,實(shí)現(xiàn)了異步請求數(shù)據(jù),并且實(shí)現(xiàn)了圖片的緩存
解答: 在內(nèi)存和沙盒目錄下各緩存一份文件摄欲,內(nèi)存中的文件到一定程度會自動清除轿亮,沙盒目錄下的文件需要由用戶手動清除,首先檢測內(nèi)存 --> 檢測沙盒目錄 --> 網(wǎng)絡(luò)請求(都沒有時才會進(jìn)行網(wǎng)絡(luò)請求)
5.1.AFNetworking的實(shí)現(xiàn)原理
NSURLConnection胸墙,主要對NSURLConnection進(jìn)行了進(jìn)一步的封裝我注,包含以下核心的類:
AFURLConnectionOperation
AFHTTPRequestOperationManager
AFHTTPRequestOperation
NSURLsession
NSURLSession對象進(jìn)行了進(jìn)一步的封裝,包含以下核心的類:AFURLSessionManager
AFHTTPSessionManagerReachability迟隅,提供了與網(wǎng)絡(luò)狀態(tài)相關(guān)的操作接口但骨,包含以下核心的類:
AFNetworkReachabilityManager
Security,提供了與安全性相關(guān)的操作接口玻淑,包含以下核心的類:
AFSecurityPolicy
Serialization嗽冒,提供了與解析數(shù)據(jù)相關(guān)的操作接口呀伙,包含以下核心的類:
AFURLRequestSerialization
AFURLResponseSerialization
6.版本迭代
作為一款產(chǎn)品补履,總會有一些共性,從一開始的誕生到 —— 開始的不完善到不斷的自我完善剿另,然后再不斷的變更需求箫锤、改動功能贬蛙、修改bug和優(yōu)化性能等中更換版本使之適應(yīng)各種環(huán)境和外部需求得以生存壯大。
7.KVC和KVO的區(qū)別
回答:
官方回答
- KVC是鍵值編碼谚攒,該機(jī)制可以不通過存取方法就可以訪問對象的實(shí)例變量阳准,可以通過一個字符串的key(屬性名)修改對象的屬性值,
- KVO是鍵值監(jiān)聽馏臭,可以監(jiān)聽一個對象屬性值的改變野蝇,是一種能使的對象獲取到其他對象屬性變化的通知機(jī)制
- 實(shí)現(xiàn)KVO鍵值觀察模式,被觀察的對象必須使用KVC鍵值編碼來修改他的實(shí)例變量括儒,這樣才能被觀察者觀察到绕沈,因此,KVC和KVO的基礎(chǔ)或者說KVO的實(shí)現(xiàn)是建立在KVC的基礎(chǔ)上的
個人理解:
KVC即是指 NSKeyValueCoding帮寻,一個非正式的Protocol乍狐,提供一種機(jī)制來間接訪問對象的屬性。而不是通過調(diào)用Setter固逗、Getter方法訪問浅蚪。KVO 就是基于 KVC 實(shí)現(xiàn)的關(guān)鍵技術(shù)之一。
—(id)valueForKey:(NSString *)key;
—(void)setValue:(id)value forKey:(NSString *)key;KVO的是KeyValue Observe的縮寫烫罩,中文是鍵值觀察惜傲。這是一個典型的觀察者模式,觀察者在鍵值改變時會得到通知贝攒。
addObserver:forKeyPath:options:context:操漠;
observeValueForKeyPath:ofObject:change:context:KVO需要注意在對象銷毀時,要移除觀察者饿这,不然會崩潰浊伙。
removeObserver:forKeyPath:context:
KVO是同步執(zhí)行,不能執(zhí)行耗時方法长捧,KVO可能發(fā)生資源搶奪
8.類方法和實(shí)例方法的區(qū)別
類方法:
- 類方法屬于類對象
- 類方法只能通過類對象調(diào)用
- 類方法中的self是類對象
- 類方法可以調(diào)用其他類方法
- 類方法中不能訪問成員變量
- 類方法不能直接調(diào)用對象方法
實(shí)例方法:
- 實(shí)例方法是屬于實(shí)例對象的
- 實(shí)例方法只能呢通過實(shí)例對象調(diào)用
- 實(shí)例方法中的self是實(shí)例對象
- 實(shí)例方法中可以訪問成員變量
- 實(shí)例方法中直接調(diào)用實(shí)例方法
- 實(shí)例方法中野可以調(diào)用類方法(通過類名)
9.繼承和擴(kuò)展的區(qū)別
解答:
在 Swift 中嚣鄙,類
可以調(diào)用和訪問超類的方法,屬性和附屬腳本串结,并且可以重寫這些方法哑子,屬性和附屬腳本來優(yōu)化或修改它們的行為。Swift 會檢查你的重寫 義在超類中是否有匹配的定義肌割,以此確保你的重寫行為是正確的卧蜓。
在 Swift 中,擴(kuò)展
就是向一個已有的類把敞、結(jié)構(gòu)體或枚舉類型添加新功能弥奸,這包括在沒有權(quán)限獲取原始源代碼的情況下擴(kuò)展類型的能力
Swift中的擴(kuò)展可以:添加計算屬性和計算靜態(tài)屬性
添加實(shí)例方法和類型方法
提供新的構(gòu)造器
添加下標(biāo)腳本
定義和使用新的嵌套類型區(qū)別:
- 繼承可以寫所有類型的屬性,類別只能擴(kuò)展計算性屬性
- 繼承可以寫所有類的的構(gòu)造方法奋早,但類別只能擴(kuò)展便利構(gòu)造方法盛霎,不能擴(kuò)展指定構(gòu)造方法
10.繼承和類別的類別
回答:
類別是對一個功能完備類的補(bǔ)充赠橙,比如一個Animal類,具有run和eat方法愤炸,想給類增加一個bark方法期揪,可以使用類別。
而多個類具有相同的實(shí)例變量和方法時规个,考慮用繼承凤薛,即子類可以繼承父類相同的特性,比如Animal類具有年齡和體重兩個屬性诞仓,Dog也具有年齡和體重兩個屬性枉侧,Dog就可以繼承Animal的兩個屬性,即為繼承狂芋。
共同點(diǎn)是都給類進(jìn)行了擴(kuò)展榨馁。
區(qū)別:1.類別是對方法的擴(kuò)展,不能添加成員變量帜矾,繼承可以在父類的成員變量基礎(chǔ)上添加新的成員變量翼虫。
2.類別只能添加新方法,而不能修改和刪除原來的方法屡萤,繼承可以增加珍剑、修改和刪除方法。
3.類別不提倡對原有方法進(jìn)行重載死陆,繼承可以使用super對原來的方法進(jìn)行重載招拙。
4.類別可以被繼承,如果一個父類中定義了一個類別措译,那么子類中也會繼承此
11.ios7别凤、ios8和ios9的區(qū)別
解答:
ios7中,pch文件默認(rèn)是創(chuàng)建好的领虹,直接使用就可以
ios8中规哪,pch文件需要自己創(chuàng)建(ios——other——PCHfile)并且需要設(shè)置pch文件的路徑(target ——> build setting--> 輸入prefix --> Apple LLVM7.0 -Language —> Prefix Header,后和橋接頭文件的設(shè)置一樣)
ios9中,pch文件的創(chuàng)建以及路徑設(shè)置和ios8中一樣塌衰,但是需要在pch文件中添加一個標(biāo)記
12.PCH的作用
作用:
就相當(dāng)于Swift中的Swift File诉稍, 寫在這里的頭文件或者定義的變量可以全局訪問到
格式:#ifdef __ OBJC __ (內(nèi)容) #endif
內(nèi)容:1.全局可使用的頭文件
2.可以添加全局可用的宏定義(就相當(dāng)于Swift File中的常量)
宏定義的名稱最好大寫,格式為#define XXXX
13.常用設(shè)計模式:MVC 最疆、工廠杯巨、代理
MVC設(shè)計模式
MVC是一種架構(gòu)模式,M表示數(shù)據(jù)模型Model努酸,V表示視圖View服爷,C表示控制器Controller。
1、Model負(fù)責(zé)存儲层扶、定義、操作數(shù)據(jù)烙荷。
2镜会、View用來展示數(shù)據(jù)給用戶,和用戶進(jìn)行操作交互终抽。
3戳表、Controller是Model于View的協(xié)調(diào)者,Controller把Model中的數(shù)據(jù)拿過來給View使用昼伴。 Controller可以直接與Model和View進(jìn)行通信匾旭,而View不能和Controller直接通信。View與Controller通信需要利用代理協(xié)議的方法圃郊,當(dāng)有數(shù)據(jù)的更新時价涝,Model也要與Controller進(jìn)行通信,這個時候使用notificationhe KVO持舆,這個方式就像一個廣播色瘩,Model發(fā)射信號,Controller設(shè)置監(jiān)聽器接收信號逸寓,當(dāng)有數(shù)據(jù)要更新時居兆,就發(fā)信號給Controller。Model和View不能直接進(jìn)行通信竹伸,因?yàn)檫@樣就違背了MVC的設(shè)計思想泥栖。
工廠
工廠方法模式:定義創(chuàng)建對象的接口,讓子類決定實(shí)例化哪一個類勋篓。工廠方法使得一個類的實(shí)例化延遲到其子類吧享。
使用場景:
1、編譯時無法準(zhǔn)確預(yù)期要創(chuàng)建的對象的類譬嚣;
2耙蔑、類想讓子類決定在運(yùn)行時創(chuàng)建什么;
3孤荣、類有若干輔助類為其子類甸陌,而你想將返回哪個子類這一信息局部;
代理
代理是一種概念盐股,是用協(xié)議來實(shí)現(xiàn)的钱豁。代理是兩個對象之間通訊的一種方式,代理主要做反向傳值疯汁,實(shí)現(xiàn)系統(tǒng)的一些回調(diào)方法牲尺,一般用來1:1的兩個對象通訊上。
14.frame和bounds的區(qū)別
- frmae
+ 以`父控件內(nèi)容`的左上角的坐標(biāo)為原點(diǎn),計算出`控件自己矩形框`的位置的尺寸
- bounds
- 以
控件自己內(nèi)容
的的左上角為坐標(biāo)原點(diǎn)谤碳,計算出控件自己矩形框
的位置的尺寸
- 概括
- frame.size == bounds.size
- scrollView.bounds.origin == scrollView.contentOffset
用圖說話:
![]()
15.幾種持久化存儲的區(qū)別:plist溃卡、NSUserDefault、歸檔(coder)蜒简、數(shù)據(jù)庫
plist文件
property list 屬性列表文件瘸羡,文件的內(nèi)容只能是 NSString NSNumber NSDate NSData NSArray NSDictionary類的對象內(nèi)容,不能保存其他類型數(shù)據(jù)搓茬。
作用: 對一些登陸注冊信息或者程序的配置信息(小數(shù)據(jù))進(jìn)行持久化存儲犹赖。
歸檔
歸檔(也稱對象序列化,對象持久化存儲)就是用某種打包格式將對象保存到本地的文件卷仑,以便以后讀回該對象的內(nèi)容峻村;解檔(也稱歸檔/讀檔)就是把歸檔的對象文件,讀成原來的對象的過程锡凝。
NSUserDefaults
NSUserDefaults適合存儲輕量級的本地數(shù)據(jù)粘昨,比如要保存一個登陸界面的數(shù)據(jù),用戶名窜锯、密碼之類的雾棺,個人覺得使用NSUserDefaults是首選。下次再登陸的時候就可以直接從NSUserDefaults里面讀取上次登陸的信息衬浑。
數(shù)據(jù)庫
數(shù)據(jù)庫管理系統(tǒng)(Database Management System)是一種操縱和管理數(shù)據(jù)庫的大型軟件捌浩,用于建立、使用和維護(hù)數(shù)據(jù)庫工秩,簡稱..DBMS尸饺。它對數(shù)據(jù)庫進(jìn)行統(tǒng)一的管理和控制,以保證數(shù)據(jù)庫的安全性和完整性助币。
15.1. sqlite和CoreData的區(qū)別
a. 使用方便性浪听。一個成熟的工程中一定是對數(shù)據(jù)持久化進(jìn)行了封裝的,因此底層使用的到底是core data還是sqlite眉菱,不應(yīng)該被業(yè)務(wù)邏輯開發(fā)者關(guān)心迹栓。因此,即使習(xí)慣寫SQL查詢的人俭缓,也應(yīng)該避免在業(yè)務(wù)邏輯中直接編寫SQL語句克伊。
b. 存儲性能,在寫入性能上华坦,因?yàn)槎际鞘褂玫膕qlite格式作為磁盤存儲格式愿吹,因此其性能是一樣的。
c. 查詢性能惜姐,core data因?yàn)橐嫒荻喾N后端格式犁跪,因此查詢時椿息,其可用的語句比直接使用sqlite少,因此有些fetch實(shí)際上不是在sqlite中執(zhí)行的坷衍。
d. core data的一個比較大的痛點(diǎn)是多人合作開發(fā)的時候寝优,管理coredata的模型需要很小心,尤其是合并的時候枫耳,它的data model是XML格式的乏矾,手動resolve比較煩心。
e. core data還有其他sql所不具備的優(yōu)點(diǎn)嘉涌,比如對undo的支持妻熊,多個context實(shí)現(xiàn)sketchbook類似的功能夸浅。為ManagedObject優(yōu)化的row cash等仑最。
f. 另外core data是支持多線程的,但需要thread confinement的方式實(shí)現(xiàn),使用了多線程之后可以最大化的防止阻塞主線程帆喇。
16.響應(yīng)者鏈
解答:
子控件/子視圖的響應(yīng)事件響應(yīng)順序:UIApplication --> window --> controller(控制器) --> 父控件(父視圖)--> 子控件/子視圖(第一響應(yīng)者)
注意:其一父類不響應(yīng)就會攔截
17.GCD
回答:
dispatch_get_global_queue 后臺執(zhí)行
dispatch_get_main_queue 主線程執(zhí)行
dispatch_once_t 一次性執(zhí)行
dispatch_time_t 延遲執(zhí)行
dispatch_group_async 并行執(zhí)行
dispatch_group_notify 并行執(zhí)行后匯總
18.UITableView的復(fù)用機(jī)制
19.UITableView的優(yōu)化
- 復(fù)用問題
- 盡量避免使用動畫
- 在圖片數(shù)量多的情況下警医,使用異步加載,并做緩存
- 自定義cell的時候直接繪制drawRect(幾乎沒人用)
20.內(nèi)存管理
21.代理和通知的區(qū)別
22.在做友盟分享之前需要做哪些準(zhǔn)備工作
23.友盟分享SDK的集成步驟
24.自定義分享面板的步驟
25.cocoa Pods實(shí)際上幫你了做了哪些配置
26.高德地圖SDK在使用之前需要做哪些準(zhǔn)備工作
27.高德地圖SDK坯钦,定位SDK的集成步驟
28.什么是線程
29.線程和進(jìn)程的區(qū)別
30.系統(tǒng)創(chuàng)建多線程的方式有哪幾種预皇,分別是什么,各自的優(yōu)點(diǎn)
31.分別在什么情境下使用GCD和NSOperation
32.在實(shí)際項(xiàng)目中婉刀,什么時候回用到多線程吟温,有什么作用
33.在使用多線程的過程中遇到過什么問題
34.viewWillAppear viewDidLoad drawRect 他們的調(diào)用順序
35.APN的推送機(jī)制
36.蘋果原生推送和極光推送的區(qū)別(極光推送相對于蘋果原生推送有哪些優(yōu)點(diǎn))
37.APNS在推送的過程中會設(shè)計到那幾個方面
38.開發(fā)者賬號有哪幾種?
39.支付寶突颊、微信鲁豪、銀聯(lián)SDK的集成步驟
40.支付寶、微信律秃、銀聯(lián)支付的流程
41.支付完成之后的結(jié)果
1. 支付成功
2. 支付失敗
余額不足
網(wǎng)絡(luò)問題
用戶取消支
在實(shí)際項(xiàng)目中爬橡,支付寶支付會跟公司自己的服務(wù)器交互
支付寶支付有客戶端和h5支付兩種方式,會自當(dāng)判斷手機(jī)客戶端是否安裝有支付寶客戶端
42.svn的具體使用流程
43.svn有什么優(yōu)缺點(diǎn)
44.svn和git的區(qū)別
45.CALayer和UIViewd的區(qū)別
46.UIView和UIWindow的區(qū)別
47.對Socket的理解/什么是Socket棒动?
48.TCP和UDP的區(qū)別糙申,各有什么優(yōu)缺點(diǎn)
49.TCP的三次握手
50.socket通訊的步驟?
51.上線流程
52.OC中的類別區(qū)別船惨?
定義:類別是一種為現(xiàn)有的類添加新方法的方式
格式: @interface 類名 (類別名) @end
局限性:
(1)無法向類中添加新的實(shí)例變量柜裸,類別沒有位置容納實(shí)例變量。
(2)名稱沖突粱锐,即當(dāng)類別中的方法與原始類方法名稱沖突時粘室,類別具有更高的優(yōu)先級。類別方法將完全取代初始方法從而無法再使用初始方法卜范。
作用:
(1)將類的實(shí)現(xiàn)分散到多個不同文件或多個不同框架中衔统。
(2)創(chuàng)建對私有方法的前向引用。
(3)向?qū)ο筇砑臃钦絽f(xié)議。
53.了解XMPP
即時通訊技術(shù)(IM -- Instant Messaging) -> 支持用戶在線實(shí)時交談
XMPP是基于XML(可擴(kuò)展標(biāo)記語言)的協(xié)議锦爵,以Jabber協(xié)議為基礎(chǔ)而舱殿,用于即時消息(IM)以及在線現(xiàn)場探測。
XMPP是一個分散型通信網(wǎng)絡(luò)
- 只要網(wǎng)絡(luò)基礎(chǔ)設(shè)施允許险掀,任何XMPP用戶都可以向其他任何XMPP 用戶傳遞消息沪袭。
- 多個XMPP服務(wù)器可以通過一個專門的“服務(wù)器-服務(wù)器”協(xié)議相互通信,提供了創(chuàng)建分散型社交網(wǎng)絡(luò)和協(xié)作框架的可能性樟氢。
- XMPP的基礎(chǔ)架構(gòu):典型的C/S(客戶端/服務(wù)端)架構(gòu)冈绊。
- XMPP中定義了三個角色: 客戶端、服務(wù)端埠啃、網(wǎng)關(guān)
- 通信能夠在這三者的任意兩個之間雙向發(fā)生
- 服務(wù)器: 同時承擔(dān)了客戶端信息記錄死宣,連接管理和信息的路由功能
- 網(wǎng)關(guān): 承擔(dān)著與異構(gòu)即時通信系統(tǒng)的互聯(lián)互通、異構(gòu)系統(tǒng)可以包括SMS(短信)/MSN/ICQ
- 基本網(wǎng)絡(luò)形式: 單客戶端通過TCP/IP連接到單服務(wù)器碴开,然后在這之上傳輸XML流
XMPP的工作原理
- 節(jié)點(diǎn)連接到服務(wù)器
- 服務(wù)器利用本地目錄系統(tǒng)中的證書對其認(rèn)證
- 節(jié)點(diǎn)指定目標(biāo)地址毅该,讓服務(wù)器告知目標(biāo)狀態(tài)
- 服務(wù)器查找、連接并進(jìn)行相互認(rèn)證
- 節(jié)點(diǎn)之間進(jìn)行交互
傳輸內(nèi)容
- XMPP應(yīng)用傳輸?shù)氖桥c即時通訊相關(guān)的指令