這裏的問題更多的是教育問題。我在一個小時前開始考慮這個問題,而 在一個樂高積木上翻轉(我知道是愚蠢的)。塊和消息
根據我的理解,塊是一個在堆棧上創建的對象。
咱們說A
是一個對象,這意味着我們可以這樣做:
[A message];
此基礎上,如果一個塊是一個對象,我們也可以這樣做:
[block message];
我是正確?
而當運行時看到的是,它會召喚:
objc_msgSend(block, @selector(message), nil);
所以我的問題是,如何才能發送塊的消息?
如果這是可能的,我會想象它也可以發送一個消息塊的參數也是可能的嗎?
而且,如果我們可以做調用塊:
block();
這是否意味着我們甚至可以使一個塊作爲消息(SEL
)爲好,因爲塊具有類似於簽名void (^)(void)
一個方法?
因爲如果有可能,那麼下面會真的讓我感到吃驚:
objc_msgSend(block, @selector(block), block);
或:
objc_msgSend(block1, @selector(block2), block3);
我希望我的想象不運行有點野性,我的理解是不要在這裏(如果是的話,請糾正我)。
塊文字具有'invoke()'函數指針。它們不需要用於調用的objective-c接口。這就需要爲不同佈局的參數爲每個塊文本創建一個NSBlock的唯一子類(塊不僅僅是void(^)(void)),只需要一個良好類型的invoke方法。 – CodaFi
通過這種方式,編譯器可以完全控制必須生成的任何函數,並且只需在堆棧上創建該塊,並在使用文字時指定它的函數指針。 – CodaFi
@CodaFi對不起,但你能告訴我更多,並告訴我怎樣才能完成一些更詳細的問題(即樣本,推理等),因爲我仍然有點迷路。謝謝。 – Unheilig