什麼是block?
block是將函式及其執行上下文封裝起來的物件。
比如:
nsinteger num = 3;
nsinteger(^block)(nsinteger) = ^nsinteger(nsinteger n);
block(2);
通過clang -rewrite-objc wytest.m命令編譯該.m檔案,發現該block被編譯成這個形式:
nsinteger num = 3;
nsinteger(*block)(nsinteger) = ((nsinteger (*)(nsinteger))&__wytest__blocktest_block_impl_0((void *)__wytest__blocktest_block_func_0, &__wytest__blocktest_block_desc_0_data, num));
((nsinteger (*)(__block_impl *, nsinteger))((__block_impl *)block)->funcptr)((__block_impl *)block, 2);
其中wytest是檔名,blocktest是方法名,這些可以忽略。
其中__wytest__blocktest_block_impl_0結構體為
struct __wytest__blocktest_block_impl_0
};
__block_impl結構體為
struct __block_impl ;
block內部有isa指標,所以說其本質也是oc物件
block內部則為:
static nsinteger __wytest__blocktest_block_func_0(struct __wytest__blocktest_block_impl_0 *__cself, nsinteger n)
所以說 block是將函式及其執行上下文封裝起來的物件
既然block內部封裝了函式,那麼它同樣也有引數和返回值。
C 面試題之a和b交換面試題
a和b交換面試題1.cpp there are two int variables a and b,don t use if switch or other judgement statements,find out the biggest one of the two numbers.美國某著名網...
面試題整理 什麼是泛型
泛型 就是一種不確定的資料型別。比如,arraylist e就是泛型。這種不確定的資料型別需要在使用這個類的時候才能夠確定出來。泛型可以省略,如果省略,預設泛型是object型別。泛型的好處 1.省略了強轉的 2.可以把執行時的問題提前到編譯時期。public class demo01generic...
面試題 什麼是物件導向程式設計
什麼是物件導向程式設計?對物件進行程式設計 萬物皆可為物件 所有事物都可以抽象為物件 我們將物件的屬性和行為 方法 統一到乙個 類 中 然後例項化類,即規定物件特定的屬性和方法 這樣具體的物件就能完成一系列不同的行為 這就是物件導向程式設計 它有三個特徵 封裝 繼承 多型 封裝就是說隱藏物件的屬性和...