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.設定數值,有乙個...