1屈溉、你使用過KVO嗎?說說看抬探。
- KVO 是 Objective-C 對觀察者設(shè)計模式的一種實現(xiàn)子巾。【另外一種是:通知機制
- KVO提供一種機制驶睦,指定一個被觀察對象(例如A類)砰左,當(dāng)對象某個屬性(例如A中的字符串name)發(fā)生更改時匿醒,對象會獲得通知场航,并作出相應(yīng)處理;【且不需要給被觀察的對象添加任何額外代碼廉羔,就能使用KVO機制】
- 基本的原理:KVO 的實現(xiàn)依賴于 Objective-C 強大的 Runtime溉痢。當(dāng)觀察某對象A時,KVO機制動態(tài)創(chuàng)建一個對象A當(dāng)前類的子類憋他,并為這個新的子類重寫了被觀察屬性KeyPath的Setter 方法孩饼。Setter 方法隨后負責(zé)通知觀察對象屬性的改變狀況。
答案:
2竹挡、你知道哪些加密方式镀娶?
編碼方案 Base64
加密方案 MD5 \ SHA \ DES \ 3DES \ RC2和RC4 \ RSA \ IDEA \ DSA \ AES
追問:Base64是加密方式嗎?它和MD5有什么區(qū)別揪罕,或者說MD5的特點是什么梯码?
答案:不是宝泵。它是一種編碼,類似UTF-8轩娶。MD5的特點是每次固定字符加密出來的密文都是相同的儿奶,不可逆性。
繼續(xù)追問:如果我只是一個“123”字符串鳄抒,使用MD5加密很容易被猜出來闯捎,如何避免呢?
答案:加鹽(Salt):在明文的固定位置插入隨機串许溅,然后再進行MD5
先加密
后亂序:先對明文進行MD5瓤鼻,然后對加密得到的MD5串的字符進行亂序
答案:3、Runtime你使用過嗎贤重?都使用了哪些
4娱仔、擴展和分類有什么區(qū)別?
答案:
- 分類只能擴充方法游桩,不能擴展屬性和成員變量(但使用Runtime可以添加屬性)
- 擴展沒有名稱牲迫,分類有。
- 一般我們把私有屬性以擴展的方法寫在.m中
5借卧、你怎么獲取私有屬性盹憎?
答案:
- 使用KVC獲取。
NSString *cat_name = [cat valueForKey:@"name"];
[cat setValue:@"大花貓" forKey:@"name"];
- 使用Runtime
Ivar m_name = class_getInstanceVariable([Cat class], "_name");
cat_name = (NSString *)object_getIvar(cat, m_name);
6铐刘、Socket了解嗎陪每?說說它和TCP的區(qū)別。
答案:
- Socket是進程通訊的一種方式镰吵,即調(diào)用這個網(wǎng)絡(luò)庫的一些API函數(shù)實現(xiàn)分布在不同主機的相關(guān)進程之間的數(shù)據(jù)交換檩禾。
- Socket通信分為Server端和Client端,開發(fā)過程中分別對應(yīng)著服務(wù)器和客戶端疤祭。當(dāng)連接上服務(wù)器后盼产,Socket就會啟動一個While或For無限循環(huán),不斷的異步監(jiān)聽Socket動靜勺馆,看是否有Read或者Write動作戏售,直到出錯或者主動結(jié)束。
區(qū)別: - TCP 是傳輸層的協(xié)議草穆;
- Socket 是從傳輸層上抽象出來的一個抽象層灌灾,本質(zhì)是接口。
- Socket層只是在TCP/UDP傳輸層上的抽象接口層悲柱,因次一個Socket連接可以基于TCP也可以基于UDP锋喜。UDP協(xié)議是不需要建立連接過程的,不管對方收不收到消息我都發(fā)豌鸡,不可靠的傳輸(即時通訊)所以“Socket也是基于TCP”
7嘿般、一些項目描述問題......
iOS技術(shù)交流群:511860085 歡迎加入轴总!
我的博客即將搬運同步至騰訊云+社區(qū),邀請大家一同入駐:https://cloud.tencent.com/developer/support-plan?invite_code=of5mt237qsan