一個(gè)不務(wù)正業(yè)的iOS碼農(nóng)之iOS開篇(一)

? ? 這個(gè)是開篇的第一篇,也就是說會(huì)有第二第三篇,等等. 但是呢, 也有可能就沒有開篇的第二和之后的篇幅了.(請(qǐng)注意我的昵稱,里面有個(gè)'鴿',不鴿你們鴿誰).

? ? 好了,第一篇的話呢,先說說iOS里面的一個(gè)概念就是Block. 這是Objective-c里面的說法,那么在swift里面相應(yīng)的概念是Closure,翻譯出來叫閉包. 同時(shí)Kotlin 和 javascript 也是有這個(gè)概念的,在Kotlin 里面呢叫l(wèi)amada表達(dá)式.

? ? 好吧,這里第一篇里面要說的呢是Objective-c里面的Block.那這里就有人問了,那你提那么多其他語言里面的概念來干什么呢?Php里面也有Closure的呀! 對(duì)不起我沒接觸過Php.并且在接下來的篇幅里(可能不存在的篇幅)會(huì)逐個(gè)比較Nodejs(ES6) swift 和Objective-c里面的這個(gè)閉包的相同和不同以及相應(yīng)的特色.(Kotlin 里面的閉包呢,由于剛剛接觸不久,我也會(huì)盡力找資料的!!! 但是也有可能不會(huì)找!)

? ?言歸正傳,word is shit, show me the code!

fliter函數(shù)

? ? 好了, 那么怎么用呢?看下面!


調(diào)用方法

? 這個(gè)結(jié)果呢是:[@83,@32]

上面的是將Block當(dāng)做返回值來用的. Block當(dāng)做參數(shù)來也很好使的,拿做動(dòng)畫的方法來說吧!看下面


動(dòng)畫方法


? ? 相信這個(gè)都是用過的,那么做為參數(shù)來說怎么寫呢?

這里的話就要分為兩個(gè)部分來說了,因?yàn)锽lock就和函數(shù)基本是一樣的.就是需要定義,和調(diào)用.那么,這樣的話呢,我們就要把Block的定義交給調(diào)用者來定義,我們?cè)诤线m的時(shí)機(jī)執(zhí)行這個(gè)Block就可以讓Block達(dá)到預(yù)期的效果了!具體看下面!

?
示范代碼

看上面的調(diào)用是不是和用AFN一樣了!

好了上面就是Block的基礎(chǔ)用法了.下面開始說一說Block的細(xì)節(jié)東西了!

先看一個(gè)Block

Block示例

然后用clang來重新編譯一下,

方法列表



參數(shù)獲取

好上面兩張圖片,我們重點(diǎn)放在第一張那個(gè)方法列表的圖片上,下面的那張暫時(shí)不說.

你們看到了,這個(gè)是我這個(gè)類的方法列表,你們有些調(diào)皮的就會(huì)問了, 這個(gè)你怎么就知道是方法列表了?

你們那個(gè)結(jié)構(gòu)體的命名嘛!BlockTestObjc_IMPL,BlockTestObjc是我這個(gè)類imp是方法實(shí)現(xiàn),L用鍵盤也能猜出來是list呀.所以說命名很重要哇.

這樣的話也就是說其實(shí)最后Block編譯之后應(yīng)該就是一個(gè)函數(shù)指針了,或者是說相當(dāng)于一個(gè)函數(shù)指針,因?yàn)檫@個(gè)只是clang重編譯出來的,我不能確定一定是最后的實(shí)現(xiàn),但是還是有很大的參考價(jià)值(今天時(shí)間不早了, 暫時(shí)先寫到這里,未完待續(xù)...)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Block基礎(chǔ)回顧 1.什么是Block? 帶有局部變量的匿名函數(shù)(名字不重要,知道怎么用就行),差不多就與C語言...
    Bugfix閱讀 6,904評(píng)論 5 61
  • 禪與 Objective-C 編程藝術(shù) (Zen and the Art of the Objective-C C...
    GrayLand閱讀 1,770評(píng)論 1 10
  • 前言 Blocks是C語言的擴(kuò)充功能,而Apple 在OS X Snow Leopard 和 iOS 4中引入了這...
    小人不才閱讀 3,861評(píng)論 0 23
  • 一、Objective-C發(fā)展史 Objective-C從1983年誕生,已經(jīng)走過了30多年的歷程。隨著時(shí)間的推移...
    沒事蹦蹦閱讀 5,998評(píng)論 12 34
  • 今天你要走了, 跟自由的鳥兒一起。 去那藍(lán)天白云上, 留下自己的足跡。 我打開了心里的牢籠, 給你插上翅膀, 飛吧...
    CZP_閱讀 391評(píng)論 2 3

友情鏈接更多精彩內(nèi)容