iOS Block面試題(什麼是Block?)

2021-09-29 10:00:22 字數 1070 閱讀 1129

什麼是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...

面試題 什麼是物件導向程式設計

什麼是物件導向程式設計?對物件進行程式設計 萬物皆可為物件 所有事物都可以抽象為物件 我們將物件的屬性和行為 方法 統一到乙個 類 中 然後例項化類,即規定物件特定的屬性和方法 這樣具體的物件就能完成一系列不同的行為 這就是物件導向程式設計 它有三個特徵 封裝 繼承 多型 封裝就是說隱藏物件的屬性和...