1、你使用過(guò)KVO嗎?說(shuō)說(shuō)看。
- KVO 是 Objective-C 對(duì)觀察者設(shè)計(jì)模式的一種實(shí)現(xiàn)。【另外一種是:通知機(jī)制
- KVO提供一種機(jī)制,指定一個(gè)被觀察對(duì)象(例如A類(lèi)),當(dāng)對(duì)象某個(gè)屬性(例如A中的字符串name)發(fā)生更改時(shí),對(duì)象會(huì)獲得通知,并作出相應(yīng)處理;【且不需要給被觀察的對(duì)象添加任何額外代碼,就能使用KVO機(jī)制】
- 基本的原理:KVO 的實(shí)現(xiàn)依賴(lài)于 Objective-C 強(qiáng)大的 Runtime。當(dāng)觀察某對(duì)象A時(shí),KVO機(jī)制動(dòng)態(tài)創(chuàng)建一個(gè)對(duì)象A當(dāng)前類(lèi)的子類(lèi),并為這個(gè)新的子類(lèi)重寫(xiě)了被觀察屬性KeyPath的Setter 方法。Setter 方法隨后負(fù)責(zé)通知觀察對(duì)象屬性的改變狀況。
答案:
2、你知道哪些加密方式?
編碼方案 Base64
加密方案 MD5 \ SHA \ DES \ 3DES \ RC2和RC4 \ RSA \ IDEA \ DSA \ AES
追問(wèn):Base64是加密方式嗎?它和MD5有什么區(qū)別,或者說(shuō)MD5的特點(diǎn)是什么?
答案:不是。它是一種編碼,類(lèi)似UTF-8。MD5的特點(diǎn)是每次固定字符加密出來(lái)的密文都是相同的,不可逆性。
繼續(xù)追問(wèn):如果我只是一個(gè)“123”字符串,使用MD5加密很容易被猜出來(lái),如何避免呢?
答案:加鹽(Salt):在明文的固定位置插入隨機(jī)串,然后再進(jìn)行MD5
先加密
后亂序:先對(duì)明文進(jìn)行MD5,然后對(duì)加密得到的MD5串的字符進(jìn)行亂序
答案:3、Runtime你使用過(guò)嗎?都使用了哪些

image.png
4、擴(kuò)展和分類(lèi)有什么區(qū)別?
答案:
- 分類(lèi)只能擴(kuò)充方法,不能擴(kuò)展屬性和成員變量(但使用Runtime可以添加屬性)
- 擴(kuò)展沒(méi)有名稱(chēng),分類(lèi)有。
- 一般我們把私有屬性以擴(kuò)展的方法寫(xiě)在.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了解嗎?說(shuō)說(shuō)它和TCP的區(qū)別。
答案:
- Socket是進(jìn)程通訊的一種方式,即調(diào)用這個(gè)網(wǎng)絡(luò)庫(kù)的一些API函數(shù)實(shí)現(xiàn)分布在不同主機(jī)的相關(guān)進(jìn)程之間的數(shù)據(jù)交換。
- Socket通信分為Server端和Client端,開(kāi)發(fā)過(guò)程中分別對(duì)應(yīng)著服務(wù)器和客戶(hù)端。當(dāng)連接上服務(wù)器后,Socket就會(huì)啟動(dòng)一個(gè)While或For無(wú)限循環(huán),不斷的異步監(jiān)聽(tīng)Socket動(dòng)靜,看是否有Read或者Write動(dòng)作,直到出錯(cuò)或者主動(dòng)結(jié)束。
區(qū)別: - TCP 是傳輸層的協(xié)議;
- Socket 是從傳輸層上抽象出來(lái)的一個(gè)抽象層,本質(zhì)是接口。
- Socket層只是在TCP/UDP傳輸層上的抽象接口層,因次一個(gè)Socket連接可以基于TCP也可以基于UDP。UDP協(xié)議是不需要建立連接過(guò)程的,不管對(duì)方收不收到消息我都發(fā),不可靠的傳輸(即時(shí)通訊)所以“Socket也是基于TCP”
7、一些項(xiàng)目描述問(wèn)題......
iOS技術(shù)交流群:511860085 歡迎加入!
我的博客即將搬運(yùn)同步至騰訊云+社區(qū),邀請(qǐng)大家一同入駐:https://cloud.tencent.com/developer/support-plan?invite_code=of5mt237qsan