oc中block的理解

2021-07-11 05:33:36 字數 1082 閱讀 2812

block可能是我在學習objective-c語法中遇到的第乙個puzzle的地方。確實,這個語法takes some getting use to.

block實際是一種閉包,它是oc中對閉包的實現。閉包是什麼?清楚地記得這個是我去年在參加鵝廠的實習筆試的時候的乙個大題,記得沒錯是第二個大題。anyway,跑題了。。。

我是通過c中的函式指標的方式去理解block的。畢竟兩個概念寫起來太像了。例如乙個ptr函式指標的宣告:

int (*ptr)(int*, float);

相應的block可以這麼宣告: 

int (^bptr)(int*, float);

block需要使用符號^宣告,^讀作caret,看幾個block的例子:

int main(int args, char *argv)
showmessage();
}
return 0;
}

block可以訪問block外部的成員,拿到block定義的時候成員的值,注意下面showmessge()輸出3,而不是7:

int main(int args, char *argv)
val = 7;
showmessage();
}
return 0;
}
通常情況下,編譯器是不允許在block內部修改block外部的成員值。在block內部看來,外部的成員對它而已是read-only的。

跟函式指標類似,block的乙個作用是作為函式或者方法的引數。除此之外,block還有乙個作用:它可以被系統分發到其他處理器上執行,或者被分發到其他執行緒上執行。

block訪問外部變數:

OC中的Block,多型

首先我們來找一下每個區域內的記憶體位址 棧int a 10 nslog p a 堆 int p malloc 40 nslog p p 全域性靜態區 static int b 10 nslog p b 常量區 常量字串,儲存的是首位址 char str iphone nslog p str 區 ns...

OC 中的block使用

在ios的開發過程中,使用塊的地方很多也很方便,但是在使用塊的過程中要注意記憶體洩露的問題。在塊建立的時候,會對塊內的所有物件的引用計數加一,直到塊銷毀,所以在使用塊的過程中需要我們進行處理,在這裡以afnetworking的 舉例,如下 weak typeof self weakself self...

OC中的block的用法總結

1.block 的基本概念 了解 block是乙個型別,可以定義變數,它的變數是用來存 塊.2.block的基本用法 固定寫法牢記 block最簡單形式 定義格式 void block名 使用格式 block名 定義是,把block當初資料型別 特點 1,型別比函式定義多了乙個 2.設定數值,有乙個...