對block的一點理解

2021-08-02 04:22:02 字數 1001 閱讀 2652

對block的理解:

block宣告的寫法:

@property (strong, nonatomic)  void (^block) (void);

@property (copy, nonatomic) void (^block)(void);

block的本質:就是oc的物件,內部也有isa指標,block是封裝了函式呼叫以及函式呼叫環境oc物件;

- (void)testblock

void(^block) (int a, int b) = ^{

nslog(@「a=%@,b=%b」,a,b);

block(30, 50);

可以通過編譯成c++ 對比出來分析

block的本質確實是_main_block_impl_0結構體型別;

1)——block_impl結構體中isa指標儲存著& _nsconcretestackblock位址,理解為類物件位址,block就是_nsconcretestackblock型別的;

2) block**塊中的**被封裝成__main_block_func_0函式,funptr即儲存著—__main_block_fun_0函式的位址;

3)desc指向__main_block_desc_0結構體,其中儲存_main_block_impl_0結構體所占用的記憶體;

1  變數的捕獲變數

a ) 區域性變數

b) 全域性變數

區域性變數: 可以—捕獲block內部變數-訪問方式通過:auto-通過值傳遞,而static-指標訪問

全域性變數:不能—捕獲block內部變數,直接可以訪問;

區域性變數都會被block捕獲,自動變數是值捕獲,靜態變數為位址捕獲。全域性變數則不會被block捕獲

2 block的型別

block的三種型別

__nsgloballock__   資料斷(記憶體區域)

__nsstackblock__   棧上 (記憶體區域)

__nsmallocblock__  堆上  (記憶體區域)

對iOS中block的一點領悟

看之前可以先做一下這個測試題目 如果都不能難倒你,那麼下面的你也不用看了。在objective c語言中,一共有3種型別的block nsconcreteglobalblock 全域性的靜態block,不會訪問任何外部變數。nsconcretestackblock 儲存在棧中的block,當函式返回...

對 threadfence的一點理解

一直沒搞清楚,cuda 2.2版增加的 threadfence到底有何作用,直到今天看到sdk 3.0手冊 中的下面例子才恍然大悟.中文為我的理解,嘿嘿 乙個求和的例子 device unsigned int count 0 統計有幾個block結束的變數 shared bool islastblo...

對GBDT的一點理解

gbdt由一系列的回歸樹組成,如下圖所示 樹的深度未必都要一樣,下圖僅為示意圖 gbdt原理 針對每乙個類別訓練一系列的回歸樹,再累加每個類別回歸樹的 值得到針對每個類別的最終的 值。單獨拿乙個類別來說,訓練的過程中假設需要 的值為f xi 實際的值為yi 有loss function l yi,f...