成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

ios開發(fā)知識(shí)點(diǎn),簡(jiǎn)述ios的特點(diǎn)

iOS開發(fā),重點(diǎn)iOS技術(shù)點(diǎn)+面試題整理

以下是我收集總結(jié)的 iOS技術(shù)點(diǎn)+面試題 分類;看看你都會(huì)了嗎?

我們提供的服務(wù)有:成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)站建設(shè)、微信公眾號(hào)開發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認(rèn)證、天祝藏族自治ssl等。為千余家企事業(yè)單位解決了網(wǎng)站和推廣的問題。提供周到的售前咨詢和貼心的售后服務(wù),是有科學(xué)管理、有技術(shù)的天祝藏族自治網(wǎng)站制作公司

重點(diǎn)總結(jié)-四大分類 :

iOS底層原理(必問) :iOS開發(fā)必備能力,也是大廠面試快速篩選人才方式之一。

常問例題 :

性能優(yōu)化以及架構(gòu)能力 :目前大廠對(duì)于這一塊,非常重視;

常問例題:

多線程、網(wǎng)絡(luò)能力: iOS中高級(jí)開發(fā),都應(yīng)該了解,并且熟悉的知識(shí)點(diǎn);

常問例題 :

數(shù)據(jù)結(jié)構(gòu)算法能力占比比較大: 通常一般大公司都會(huì)有一些筆試:雖然不在核心崗位對(duì)于數(shù)據(jù)結(jié)構(gòu)算法要求不是非常嚴(yán)格,但是也會(huì)有一些常規(guī)的數(shù)據(jù)結(jié)構(gòu)和算法的題

常問例題:

推薦閱讀:iOS熱門面試技術(shù)文集

iOS藍(lán)牙開發(fā)相關(guān)知識(shí)點(diǎn)和注意事項(xiàng)

總結(jié)一下藍(lán)牙開發(fā)相關(guān)的知識(shí)點(diǎn)和注意事項(xiàng),做個(gè)筆記,也希望你們能少踩坑

(公司部分藍(lán)牙項(xiàng)目為混編項(xiàng)目,藍(lán)牙相關(guān)處理均采用了Objective-C,故本文????均采用OC,Swift處理相同)

藍(lán)牙4.0包含兩個(gè)藍(lán)牙標(biāo)準(zhǔn),它是一個(gè)是 雙模 的標(biāo)準(zhǔn),它包含 傳統(tǒng)藍(lán)牙部分(也稱經(jīng)典藍(lán)牙) 和 低功耗藍(lán)牙部分(BLE) , 二者適用于不同的應(yīng)用場(chǎng)景和應(yīng)用條件。他們的特點(diǎn)如下

所以藍(lán)牙4.0是集成了傳統(tǒng)藍(lán)牙和低功耗藍(lán)牙兩個(gè)標(biāo)準(zhǔn)的,并不只是低功耗藍(lán)牙

藍(lán)牙4.0支持兩種部署方式: 雙模式 和 單模式 ,雙模同時(shí)支持經(jīng)典藍(lán)牙和低功耗藍(lán)牙,而單模則只支持其中一種。

二者更多細(xì)節(jié)詳見: 傳統(tǒng)藍(lán)牙和低功耗藍(lán)牙的區(qū)別

iOS中藍(lán)牙相關(guān)功能都封裝進(jìn)了 CoreBluetooth 類中,其中有幾個(gè)常見的參數(shù)和概念

具體API參考 CoreBluetooth藍(lán)牙開發(fā)

保存到數(shù)組中的設(shè)備可通過 UUID 來進(jìn)行區(qū)分。從 iOS7之后蘋果不提供外設(shè)的mac地址,外設(shè)的唯一標(biāo)識(shí)換成了由mac封裝加密后的UUID,需要注意的是不同的手機(jī)獲取同一個(gè)外設(shè)的UUID是不同的,所以在不同手機(jī)之間UUID不是唯一的,但在本機(jī)上可以作為唯一標(biāo)識(shí)(特殊情況手機(jī)刷機(jī)后也會(huì)改變UUID)。

如何獲取Mac地址

一般使用場(chǎng)景是根據(jù)Mac地址區(qū)分某個(gè)外設(shè)

注意點(diǎn):

寫入數(shù)據(jù)時(shí)可能會(huì)遇到需要分包發(fā)送的情況,我們可以通過下面的API或許當(dāng)前特征支持的最大的單條寫入長(zhǎng)度

maxLength 一般取決于藍(lán)牙模塊內(nèi)部接收 緩沖區(qū) 的大小,很多硬件設(shè)備這個(gè)緩沖區(qū)的大小是 20 字節(jié), 這個(gè)大小也和特征的寫入權(quán)限有關(guān),像具有寫入權(quán)限 withResponse 類的特征其大小一般為 512 字節(jié),當(dāng)然這些都是取決于設(shè)備測(cè)的設(shè)置;

當(dāng)我們單次發(fā)送的數(shù)據(jù)字節(jié)長(zhǎng)度大于 maxLength 時(shí),我們就需要采用分包的方式來發(fā)送數(shù)據(jù)了,

分包發(fā)送的邏輯類似于下面

這邊延時(shí)主要是設(shè)備側(cè)的接收模塊接收數(shù)據(jù)以及處理能力有限

外圍設(shè)備測(cè)和中心設(shè)備(大部分情況下是手機(jī))保持藍(lán)牙連接的狀態(tài)下,如果長(zhǎng)時(shí)間不產(chǎn)生交互,藍(lán)牙就會(huì)斷開,所以為了保持兩者持續(xù)的連接狀態(tài),需要做保活處理,也就是需要持續(xù)的發(fā)送心跳包(watchdog)。相應(yīng)的處理是使用一個(gè)定時(shí)器定時(shí)向設(shè)備側(cè)發(fā)送符合設(shè)備協(xié)議格式的心跳包。

斷開連接很簡(jiǎn)單,只需要調(diào)用 [self.centralManager cancelPeripheralConnection:peripheral] 傳入需要斷開連接的設(shè)備對(duì)象就行了。斷開連接時(shí)會(huì)自動(dòng)調(diào)用 centralManager:didDisconnectPeripheral:error: 代理方法。

按照之前的慣例,當(dāng)error為nil時(shí)表示斷開成功,error不為nil時(shí)斷開失敗。這種理解是錯(cuò)誤的。

當(dāng)你調(diào)用 cancelPeripheralConnection: 方法(主動(dòng)斷開)斷開連接時(shí)error為nil ; 沒有調(diào)用這個(gè)方法(異常斷開)而斷開時(shí)error返回的是異常斷開的原因。也可以理解為主動(dòng)調(diào)用斷開連接方法一定會(huì)斷開

接下來就是斷開重連的問題了,對(duì)藍(lán)牙功能進(jìn)行封裝時(shí)肯定少不了斷開重連。首先斷開時(shí)可通過上面的代理方法的error是否為nil判斷是否是異常斷開,一般情況下異常斷開時(shí)是需要重連的

原因就是當(dāng)設(shè)備斷開連接后 peripheral.services 為nil了,當(dāng)然 service.characteristics 也是nil,所以需要在斷開連接時(shí)把保存這個(gè)設(shè)備對(duì)應(yīng)的服務(wù)和特征全部清除,然后在連接成功時(shí)重新過一遍發(fā)現(xiàn)服務(wù)和發(fā)現(xiàn)特征的流程就好了。

iOS7 開始,Apple加入了Beacon圍欄檢測(cè)的API, ( iBeacon-維基百科 ), 其工作方式是,配備有低功耗藍(lán)牙(BLE)通信功能的設(shè)備使用 BLE 技術(shù)向周圍發(fā)送自己特有的 ID,接收到該 ID 的應(yīng)用軟件會(huì)根據(jù)該 ID 采取一些行動(dòng)。比如,在店鋪里設(shè)置 iBeacon 通信模塊的話,便可讓 iPhone 和 iPad 上運(yùn)行一資訊告知服務(wù)器,或者由服務(wù)器向顧客發(fā)送折扣券及進(jìn)店積分, 或者公司的手機(jī)打卡,只要手機(jī)靠近打卡器一定范圍,手機(jī)測(cè)就向打開器發(fā)送打卡信息,從而自動(dòng)打卡。這種場(chǎng)景還有很多。 其中一個(gè)最重要的功能就是App的喚醒功能(殺死后也能喚醒)

舉一個(gè)我們的例子,我們的產(chǎn)品業(yè)務(wù)場(chǎng)景就是在進(jìn)入車輛以后,需要使用藍(lán)牙連接我們的后裝車載設(shè)備以采集車輛信息和駕駛行為行程等,這里有一個(gè)問題就是在App被殺死的情況下如何喚醒App, 因?yàn)椴豢赡芤笥脩裘看味贾鲃?dòng)去打開App,這樣體驗(yàn)太差。我們的做法是通過iBeacon,當(dāng)我們的車輛點(diǎn)火以后,設(shè)備測(cè)通電,發(fā)出 iBeacon廣播 ,App實(shí)現(xiàn)監(jiān)聽iBeacon相關(guān)功能后就可以喚醒我們App,然后在相應(yīng)的回調(diào)的處理一些事情,比如通過藍(lán)牙連接設(shè)備。這里的前提條件是我們的硬件設(shè)備測(cè)包含iBeacon模塊,具有iBeacon功能,而且對(duì)iBeacon的廣播頻率也有一定的要求,長(zhǎng)了可能喚醒的功能會(huì)不穩(wěn)定,官方建議的好像是100ms,頻率超高越耗電,但可以讓手機(jī)或其它監(jiān)聽設(shè)備越快地發(fā)現(xiàn)iBeacon。標(biāo)準(zhǔn)的BLE廣播距離是100m,這使Beacon在室內(nèi)位置跟蹤場(chǎng)景下的效果更理想。

關(guān)于iBeacon更多的使用及介紹請(qǐng)參考

蘋果核 - iOS端近場(chǎng)圍欄檢測(cè)(一) ——iBeacon

iBeacon技術(shù)初探

iOS 基礎(chǔ)知識(shí)點(diǎn)

一、屬性修飾符

讀寫屬性: (readwrite/readonly)

語(yǔ)義特性:(內(nèi)存有關(guān)):(assign/retain/copy)

原子特性:(和線程安全有關(guān)): (atomicit/nonatomic)

readonly:只讀,屬性只會(huì)生成getter方法,不會(huì)生成setter.

readwrite:既可讀又可寫.屬性自動(dòng)生成setter和getter方法.(默認(rèn)的讀寫特性)

getter= 方法名:指定生成getter方法時(shí)的方法名.

setter= 方法名:指定生成setter方法時(shí)的方法名.

assign: 默認(rèn)類型,setter方法直接賦值,而不進(jìn)行retain操作,也可以只針對(duì)對(duì)象,只是做簡(jiǎn)單的賦值操作. 默認(rèn)的語(yǔ)義特性.

retain: 針對(duì)于對(duì)象類型,setter方法對(duì)參數(shù)進(jìn)行release舊值,再retain新值。

copy: setter方法進(jìn)行Copy操作,與retain一樣, 針對(duì)于對(duì)象類型,會(huì)拷貝一個(gè)新的對(duì)象,將新的對(duì)象的引用計(jì)數(shù)加1

nonatomic: 禁止多線程,變量保護(hù),提高性能

atomic:原子特性,保證線程安全.系統(tǒng)默認(rèn)的原子特性.

weak:指針指向的地址一旦被釋放,這些指針都將被賦值為nil。這樣的好處能有效的防止野指針。消除循環(huán)引用 。

二、 @dynamic 關(guān)鍵字

@dynamic dynamicStr; // 告訴編譯器,不自定生成getter和setter方法,避免編譯期間產(chǎn)生警告,然后由自己實(shí)現(xiàn)存取方法。

三、 @synthesize 關(guān)鍵字

@synthesize strongStr = _strongStr; // 可以定義 與變量名不相同的getter和setter的命名,籍此來保護(hù)變量不會(huì)被不恰當(dāng)?shù)脑L問, 編譯器期間,讓編譯器自動(dòng)生成getter/setter方法 當(dāng)有自定義的存或取方法時(shí),自定義會(huì)屏蔽自動(dòng)生成該方法

四、重定義setter方法getter方法

// 重定義setter方法

// 重定義getter方法

五、不可變字符串 NSString

// 運(yùn)行l(wèi)og日志:

2021-03-11 17:30:08.112340+0800 TestObject-C[93449:1623723] temp1: 不可變字符串, 0x10df9e778

2021-03-11 17:30:08.112529+0800 TestObject-C[93449:1623723] str: 不可變字符串, 0x10df9e778

2021-03-11 17:30:08.112610+0800 TestObject-C****[****93449:1623723****]**** strongStr: ****不可變字符串****, 0x10df9e778

六、可變字符串 NSMutableString

// 一、將不可變字符串賦值給可變字符串對(duì)象。

// 賦值可變字符串對(duì)象后,對(duì)象仍然是不可變對(duì)象

2021-03-11 17:30:08.114159+0800 TestObject-C[93449:1623723] mTemp: 不 可變字符串1, 0x10df9e878

2021-03-11 17:30:08.114393+0800 TestObject-C[93449:1623723] mCopyStr: 不 可變字符串1, 0x10df9e878

2021-03-11 17:30:08.114697+0800 TestObject-C****[****93449:1623723****]**** mStrongStr: 不 可變字符串****1, 0x10df9e878

// 一、將可變字符串賦值給可變字符串對(duì)象。

2021-03-11 19:38:34.493763+0800 TestObject-C[95274:1718783] mTemp2: 可變字符串2, 0x600002710ea0, __NSCFString

2021-03-11 19:38:34.493923+0800 TestObject-C[95274:1718783] mCopyStr: 可變字符串2, 0x6000027110e0, __NSCFString

2021-03-11 19:38:34.494037+0800 TestObject-C****[****95274:1718783****]**** mStrongStr: ****可變字符串****2, 0x600002710ea0, __NSCFString

2021-03-11 19:38:34.494422+0800 TestObject-C[95274:1718783] mTemp2: 可變字符串211, 0x600002710ea0, __NSCFString

2021-03-11 19:38:34.494697+0800 TestObject-C[95274:1718783] mCopyStr: 可變字符串2, 0x6000027110e0, __NSCFString

2021-03-11 19:38:34.494903+0800 TestObject-C****[****95274:1718783****]**** mStrongStr: ****可變字符串****211, 0x600002710ea0, __NSCFString

七、富文本字符串 NSMutableAttributedString

2021-03-11 19:34:52.041131+0800 TestObject-C[95207:1715249] attriStr: 我是富文本我是富文本我是富文本我是富文本, 0x600000a5bc00, NSConcreteMutableAttributedString

2021-03-11 19:34:52.041307+0800 TestObject-C[95207:1715249] mutableAttri: 我是富文本我是富文本我是富文本我是富文本, 0x600000a5be40, NSConcreteAttributedString

2021-03-11 19:34:52.041425+0800 TestObject-C****[****95207:1715249****]**** mutableStrongAttri: ****我是富文本我是富文本我是富文本我是富文本****, 0x600000a5bc00, NSConcreteMutableAttributedString

2021-03-11 19:34:52.041943+0800 TestObject-C[95207:1715249] attriStr: 我是富文本我是富文本我是富文本我是富文本---我是新添加的, 0x600000a5bc00, NSConcreteMutableAttributedString

2021-03-11 19:34:52.042281+0800 TestObject-C****[****95207:1715249****]**** mutableStrongAttri: ****我是富文本我是富文本我是富文本我是富文本****---****我是新添加的****, 0x600000a5bc00, NSConcreteMutableAttributedString

八、不可變數(shù)組NSArray

//一、 不可變數(shù)組賦值NSArray的對(duì)象

2021-03-11 19:04:42.636207+0800 TestObject-C[94739:1689350] arr: (1, 2,

3), 0x600001d5c8d0

2021-03-11 19:04:42.636411+0800 TestObject-C[94739:1689350] persons: ( 1, 2, 3), 0x600001d5c8d0

2021-03-11 19:04:42.636538+0800 TestObject-C[94739:1689350] students: (1, 2, 3), 0x600001d5c8d0

2021-03-11 19:04:42.636646+0800 TestObject-C[94739:1689350] arr: (1, 2, 3), 0x600001d5c8d0

2021-03-11 19:04:42.636767+0800 TestObject-C[94739:1689350] students: (1, 2,3), 0x600001d5c8d0, __NSArrayI

// 二、不可變數(shù)組賦值給NSMutableArray的對(duì)象

**2021-03-11 19:15:59.046728+0800 TestObject-C[94934:1699039] arr: (1,2,3), 0x600002f6c000

2021-03-11 19:15:59.046878+0800 TestObject-C[94934:1699039] cars: (1, 2,3), 0x600002f6c000, __NSArrayI2021-03-11 19:15:59.046982+0800 TestObject-C[94934:1699039] dogs: (1,2,3), 0x600002f6c000, __NSArrayI

九、可變數(shù)組 NSMutableArray

2021-03-11 19:22:39.183745+0800 TestObject-C[95044:1705082] arr2: (2,4,10,12), 0x600000fefea0

2021-03-11 19:22:39.184067+0800 TestObject-C[95044:1705082] cars: (2,4,10), 0x600000fef240, __NSArrayI

**2021-03-11 19:22:39.184272+0800 TestObject-C[95044:1705082] dogs: (2,4,10,12), 0x600000fefea0, __NSArrayM

十、不可變字典 NSDictionary

// 不可變數(shù)組賦值給NSDictionary對(duì)象

2021-03-11 19:25:32.789615+0800 TestObject-C[95102:1708378] dic: {key1 = 1;key2 = value;}, 0x6000028799c0**

2021-03-11 19:25:32.789801+0800 TestObject-C[95102:1708378] personDic: { key1 = 1;key2 = value;}, 0x6000028799c0, __NSDictionaryI

2021-03-11 19:25:32.789919+0800 TestObject-C[95102:1708378] studentDic: { key1 = 1;key2 = value;}, 0x6000028799c0, __NSDictionaryI

十一、可變字典 NSMutableDictionary

2021-03-11 19:59:28.739545+0800 TestObject-C[96373:1735182] mDic: { key1 = 10;key2 = value2;}, 0x6000017f0700, __NSDictionaryM

**2021-03-11 19:59:28.740177+0800 TestObject-C[96373:1735182] carDic: {key1 = 10;key2 = value2;}, 0x6000017f07a0, __NSFrozenDictionaryM

2021-03-11 19:59:28.740359+0800 TestObject-C[96373:1735182] dogDic: { key1 = 10;key2 = value2;}, 0x6000017f0700, __NSDictionaryM

2021-03-11 20:05:24.028840+0800 TestObject-C[96469:1740141] mDic: {key1 = 10; key2 = value2;key4 = value4;}, 0x6000011bd7e0, __NSDictionaryM

2021-03-11 20:05:24.028930+0800 TestObject-C[96469:1740141] carDic: { key1 = 10; key2 = value2;}, 0x6000011bd820, __NSFrozenDictionaryM

2021-03-11 20:05:24.029028+0800 TestObject-C[96469:1740141] dogDic: {key1 = 10;key2 = value2;key4 = value4;}, 0x6000011bd7e0, __NSDictionaryM

十二、不可變集合 NSSet

// 一、不可變NSSet賦值給 NSSet對(duì)象

2021-03-11 20:09:49.418694+0800 TestObject-C[96545:1744249] set: {( 1,2,3)}, 0x600003fd2e80, __NSSetI

2021-03-11 20:09:49.418826+0800 TestObject-C[96545:1744249] personSet: {(1,2,3)}, 0x600003fd2e80, __NSSetI

2021-03-11 20:09:49.418914+0800 TestObject-C[96545:1744249] studentSet: {(1,2,3)}, 0x600003fd2e80, __NSSetI

// 二、不可變NSSet賦值給 NSMutableSet對(duì)象

2021-03-11 20:09:49.419281+0800 TestObject-C[96545:1744249] carSet: {(1,2,3)}, 0x600003fd2e80, __NSSetI

2021-03-11 20:09:49.419362+0800 TestObject-C[96545:1744249] dogSet: {(1, 2,3)}, 0x600003fd2e80, __NSSetI

十三、可變集合 NSMutableSet

2021-03-11 20:18:06.896997+0800 TestObject-C[96705:1752827] mSet: {(3,1,2,5)}, 0x600001e0a700, __NSSetM

2021-03-11 20:18:06.897218+0800 TestObject-C[96705:1752827] carSet: {( 1,2,3)}, 0x600001014bd0, __NSSetI

2021-03-11 20:18:06.897340+0800 TestObject-C[96705:1752827] dogSet: {(3,1,2, 5)}, 0x600001e0a700, __NSSetM

iOS開發(fā)之基礎(chǔ)篇(5)—— NSNumber、NSValue

Xcode 8.2.1

前文說過,NSArray和NSDictionary只能存入OC對(duì)象。不信我們可以做個(gè)試驗(yàn):將一個(gè)int類型或者是NSInteger放入NSMutableArray里面。(NSInteger和int的差別:NSInteger會(huì)根據(jù)系統(tǒng)的位數(shù)32or64,自動(dòng)選擇int的最大數(shù)值int or long,這樣我們就不用考慮設(shè)備是32位還是64位系統(tǒng))

這樣是會(huì)編譯出錯(cuò)的,存入不成功。

那怎么辦呢?所以,我們需要將int或者NSInteger類型轉(zhuǎn)換成NSNumber(OC對(duì)象),然后再存入NSArray中。

NSNumber可以轉(zhuǎn)換一系列的基礎(chǔ)數(shù)字類型(char、int、float、long、bool等等),還提供了一個(gè)compare方法來將NSNumber對(duì)象進(jìn)行數(shù)值排序。

我們來看看NSNumber有哪些要掌握的知識(shí)點(diǎn):

運(yùn)行結(jié)果如下:

之所以把NSNumber和NSValue放到同一篇,是因?yàn)镹SNumber是NSValue的子類,NSValue除了能夠包裝NSNumber能夠包裝的基礎(chǔ)數(shù)字類型外,還能夠包裝系統(tǒng)框架提供的CGRect/CGPoint/CGSize等數(shù)據(jù)結(jié)構(gòu),也可以是自己定義的struct。最終也能放入數(shù)組。

同樣,我們來看看它的應(yīng)用:

運(yùn)行結(jié)果:

當(dāng)前題目:ios開發(fā)知識(shí)點(diǎn),簡(jiǎn)述ios的特點(diǎn)
鏈接地址:http://jinyejixie.com/article10/dsdgsgo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供響應(yīng)式網(wǎng)站品牌網(wǎng)站制作、定制開發(fā)、網(wǎng)站導(dǎo)航標(biāo)簽優(yōu)化、定制網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站托管運(yùn)營(yíng)
太原市| 通州区| 年辖:市辖区| 宁安市| 安宁市| 汝州市| 苍南县| 玉屏| 铜川市| 夏河县| 菏泽市| 赞皇县| 竹溪县| 芒康县| 陈巴尔虎旗| 汾阳市| 郸城县| 班戈县| 霍城县| 应用必备| 平江县| 株洲市| 咸丰县| 林芝县| 额敏县| 合水县| 双桥区| 神农架林区| 开远市| 潞西市| 青阳县| 徐汇区| 临西县| 兰坪| 水富县| 钟祥市| 新巴尔虎左旗| 安塞县| 德州市| 卓尼县| 五大连池市|