日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

OC中block的理解

發(fā)布時間:2024/1/18 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 OC中block的理解 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

### Block學(xué)習(xí)
##Block內(nèi)存模型
#Class指針 isa:
1.在Objective-C中,任何類的定義都是對象。類和類的實例(對象)沒有任何本質(zhì)上的區(qū)別。任何對象都有isa指針。
2.類是一個 objc_class 結(jié)構(gòu)類型的指針, id是一個 objc_object 結(jié)構(gòu)類型的指針.
3.isa指針概念:是一個Class 類型的指針. 每個實例對象有個isa的指針,他指向?qū)ο蟮念?#xff0c;而Class里也有個isa的指針, 指向meteClass(元類)。元類保存了類方法的列表。當(dāng)類方法被調(diào)用時,先會從本身查找類方法的實現(xiàn),如果沒有,元類會向他父類查找該方法。
? 同時注意的是:元類(meteClass)也是類,它也是對象。元類也有isa指針,它的isa指針最終指向的是一個根元類(root meteClass).根元類的isa指針指向本身,這樣形成了一個封閉的內(nèi)循環(huán)。
? super_class:父類,如果該類已經(jīng)是最頂層的根類,那么它為NULL。
? version:類的版本信息,默認為0
? info:供運行期使用的一些位標(biāo)識。
? instance_size:該類的實例變量大小ivars:成員變量的數(shù)組。
4.每一個對象本質(zhì)上都是一個類的實例。其中類定義了成員變量和成員方法的列表。
? 對象通過對象的isa指針指向類。每一個類本質(zhì)上都是一個對象,類其實是元類(meteClass)的實例。元類定義了類方法的列表。
? 類通過類的isa指針指向元類。
? 所有的元類最終繼承一個根元類,根元類isa指針指向本身,形成一個封閉的內(nèi)循環(huán)。
#函數(shù)指針
1.函數(shù)指針fun就是block的執(zhí)行函數(shù)。
#變量池
1.變量池中保存的都是block函數(shù)中所用到的變量的指針地址,例如block函數(shù)體中調(diào)用了self得某個方法,則變量池中就是保存指向self的指針。
這個內(nèi)存模型和常規(guī)的對象模型又不太一樣,所以我將block理解成為只含有一個方法的對象,切對象中得變量是動態(tài)增加,減少的。

??block在程序中作用非常大,一般我在編程用得最多的就是在http請求中,因為網(wǎng)絡(luò)請求是一個異步執(zhí)行的過程,當(dāng)網(wǎng)絡(luò)請求成功(失敗)時,就會調(diào)用相應(yīng)的block函數(shù)
##Block用法
#定義:*returnType (^blockName)(parameter){}*
使用用例:
*int (^max)(int a,int b);
//給這個block賦值
max = ^(int a,int b)
{
? ? return a>b?a:b;
}
//使用block
int m = max(3,5) ? //m=5*?
如果需要在block內(nèi)改變外部變量的數(shù)值,則外部變量必須在定義時,前面加上__block關(guān)鍵字

*__block int amount = 0;
void (^addAmount) = ^{
? ?amount += 1;
}
NSLog(%d,amount) //amount = 1;
//如果不加__block關(guān)鍵字,則數(shù)值在block內(nèi)無法改變*

//使用方法
*__weak id weakSelf = self;
void (^someBlock) = ^{
? ? [weakSelf someMessage];
}*

someBlock();

轉(zhuǎn)載:

作者:程小龍?
來源:CSDN?
原文:https://blog.csdn.net/becomedragonlong/article/details/40041617?

總結(jié)

以上是生活随笔為你收集整理的OC中block的理解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。