最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

iOS Block解開多年以來一直的誤解

 更新時(shí)間:2018年05月15日 10:06:17   作者:CoderHG  
這篇文章主要給大家介紹了關(guān)于iOS Block多年以來一直的誤解如何解開的相關(guān)資料,文中通過圖文介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

首先來了解下什么是Block

       (1)Block是OC中的一種數(shù)據(jù)類型,在iOS開發(fā)中被廣泛使用

       (2)^是Block的特有標(biāo)記

       (3)Block的實(shí)現(xiàn)代碼包含在{}之間

       (4)大多情況下,以內(nèi)聯(lián)inline函數(shù)的方式被定義和使用

       (5)Block與C語言的函數(shù)指針有些相似,但使用起來更加靈活

這張圖是我在2015年的時(shí)候發(fā)現(xiàn)的新大陸,那時(shí)候也知道block是一種特殊的數(shù)據(jù)類型、也是一種特殊的對象(不同于NSObject)。在執(zhí)行的時(shí)候務(wù)必要先if判斷一下,否者crach。我給一個(gè)block變量賦值nil,盡然也crach了。看下面的值,是NULL而不是nil。

一、特殊的對象類型

下面代碼的正確性, 說明block也是一種對象類型:

{
 // 數(shù)組中有一個(gè)block成員
 NSArray* arr = @[^(NSString* name){
  NSLog(@"哈哈哈哈");
  return name;
 }];
 // 是不是就能說明, block本來也是一種特殊的對象
 NSString* (^b)() = arr.firstObject;
 NSLog(@"%@", b(@"CoderHG"));
}

以上代碼的合法性,足以證明 Block 是一種特殊的對象類型。那么以后面試的時(shí)候,就可以裝一下逼,大膽的說在 OC 中有三種不同的對象類型,分別是:NSObject、NSProxy 與 Block。

二、判空的重要性

在上面也提到在執(zhí)行block之前要判空處理,這是有原因的。


盡然一個(gè)nil對象的block屬性執(zhí)行的時(shí)候也crach了。這可顛覆了我一直以來對block的理解。

但是、不管怎么的crach,只要是在執(zhí)行之前if一下總是沒有錯(cuò)的。那具體為什么會(huì)crash呢?請看下圖解釋:


上圖中不僅介紹了為什么會(huì)閃退,同時(shí)還介紹了為什么閃退時(shí)的address=0x10。面試必備、面試必備、面試必備。

三、我的面試經(jīng)過 (17年12月)

在美團(tuán)面試第二輪的時(shí)候,被問到了,第二輪大概1個(gè)小時(shí)吧,面試官正想要結(jié)束面試的時(shí)候,最后來了這么一個(gè)問題,大概的經(jīng)過是這樣的:

1、如果調(diào)用一個(gè)賦值為空的 block,會(huì)發(fā)生什么情況?

看到這個(gè)問題,把我樂壞了。我所回答到的點(diǎn)有:直接 crash、block 是一個(gè)特殊的對象、賦值為 NULL 與 nil 都會(huì)閃退。
我忘記了一個(gè)成語叫樂極生悲,因?yàn)榻酉聛淼囊粋€(gè)問題。

2、閃退的那個(gè)地址值(address)是多少?

一臉的蒙圈,怎么會(huì)問這個(gè)問題?。。。只能靠猜了,因?yàn)槠綍r(shí)根本不會(huì)關(guān)注這個(gè)。應(yīng)該是0x0,直接告訴的面試官是猜的。沒想到他直接告訴我不是這個(gè)值,然后他再次拋出另一個(gè)問題。

3、這個(gè)值是0x10,你知道是為什么么?

我連第2問都不知道,第3問肯定是不知道的了。。。。。

后來的后來,才總結(jié)出上面的那張圖片的內(nèi)容。

謝謝~

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。

相關(guān)文章

  • iOS開發(fā)技巧之WeakSelf宏的進(jìn)化詳解

    iOS開發(fā)技巧之WeakSelf宏的進(jìn)化詳解

    在程序中我們經(jīng)常用到Block,但寫weak self 時(shí)會(huì)比較繁瑣,下面這篇文章主要給大家介紹了關(guān)于iOS開發(fā)技巧之WeakSelf宏的進(jìn)化的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們一起來看看吧
    2018-05-05
  • 沙盒路徑獲取以及圖片保存到相簿的方法

    沙盒路徑獲取以及圖片保存到相簿的方法

    下面小編就為大家分享一篇沙盒路徑獲取以及圖片保存到相簿的方法,具有很的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2017-12-12
  • iOS 10 推送高階篇(必看)

    iOS 10 推送高階篇(必看)

    本文重點(diǎn)給大家介紹ios10 推送的所有通知類,所以說這篇教程是ios10推送必看篇,感興趣的朋友快來一起學(xué)習(xí)吧
    2016-09-09
  • iOS開發(fā)之自定義UITextField的方法

    iOS開發(fā)之自定義UITextField的方法

    UITextField是IOS開發(fā)中用戶交互中重要的一個(gè)控件,常被用來做賬號(hào)密碼框,輸入信息框等。本文給大家介紹iOS開發(fā)之自定義UITextField的方法,感興趣的朋友一起學(xué)習(xí)吧
    2016-05-05
  • 以代碼實(shí)例總結(jié)iOS應(yīng)用開發(fā)中數(shù)據(jù)的存儲(chǔ)方式

    以代碼實(shí)例總結(jié)iOS應(yīng)用開發(fā)中數(shù)據(jù)的存儲(chǔ)方式

    這篇文章主要介紹了iOS應(yīng)用開發(fā)中數(shù)據(jù)的存儲(chǔ)方式的實(shí)例總結(jié),代碼為傳統(tǒng)的Objective-C語言,需要的朋友可以參考下
    2016-02-02
  • iOS實(shí)現(xiàn)日歷行程的增刪改查

    iOS實(shí)現(xiàn)日歷行程的增刪改查

    這篇文章主要為大家詳細(xì)介紹了iOS實(shí)現(xiàn)日歷行程的增刪改查,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • IOS實(shí)現(xiàn)點(diǎn)擊滑動(dòng)抽屜效果

    IOS實(shí)現(xiàn)點(diǎn)擊滑動(dòng)抽屜效果

    這篇文章主要為大家詳細(xì)介紹了IOS實(shí)現(xiàn)點(diǎn)擊滑動(dòng)抽屜效果的相關(guān)資料,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-02-02
  • iOS 12+ 中檢測網(wǎng)絡(luò)訪問的方法

    iOS 12+ 中檢測網(wǎng)絡(luò)訪問的方法

    這篇文章主要介紹了iOS 12+ 中檢測網(wǎng)絡(luò)訪問的方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2019-01-01
  • 解析iOS10中的極光推送消息的適配

    解析iOS10中的極光推送消息的適配

    這篇文章主要介紹了解析iOS10中的極光推送消息的適配的相關(guān)資料,我們需要先安裝Xcode8.0版本,接下來本文分步驟詳細(xì)給大家介紹,需要的朋友可以參考下
    2016-09-09
  • iOS開發(fā)實(shí)戰(zhàn)之Label全方位對齊的輕松實(shí)現(xiàn)

    iOS開發(fā)實(shí)戰(zhàn)之Label全方位對齊的輕松實(shí)現(xiàn)

    這篇文章主要給大家介紹了關(guān)于iOS開發(fā)實(shí)戰(zhàn)之輕松實(shí)現(xiàn)Label全方位對齊的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-10-10

最新評(píng)論

建瓯市| 桓台县| 扬州市| 思茅市| 临澧县| 安西县| 会宁县| 页游| 渝中区| 东乡族自治县| 射洪县| 东丽区| 凉城县| 荆州市| 姚安县| 犍为县| 杭锦后旗| 广灵县| 招远市| 花垣县| 湄潭县| 旅游| 安龙县| 剑川县| 巴南区| 上饶县| 抚宁县| 嘉义市| 淮滨县| 旬阳县| 白银市| 抚宁县| 康平县| 太湖县| 思茅市| 溧阳市| 丁青县| 伽师县| 清远市| 杭锦旗| 甘肃省|