我很新使用塊。我想知道是否有辦法將代碼動態添加到塊中?如果你願意的話,一個可變的塊。添加代碼來動態阻止
回答
這聽起來像是你想要的,但是如果不是完全相同的結果,它會得到相似的結果:從外部塊中順序調用__block NSMutableArray
塊。
是一個愚蠢的演示:
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[])
{
@autoreleasepool {
__block NSMutableArray *subblocks = [NSMutableArray array];
void (^blockWithBlocks)(void) = ^{
NSLog(@"%s: in blockWithBlocks()", __PRETTY_FUNCTION__);
for (void (^subblock)(void) in subblocks) {
subblock();
}
};
for (int i = 0; i < 3; i++) {
void (^subblock)(void) = ^{
NSLog(@"%s: in subblock %d", __PRETTY_FUNCTION__, i);
};
[subblocks addObject:subblock];
}
blockWithBlocks();
}
return 0;
}
注意,對於ARC下複製塊的要求一直在不斷變化。以前它會一直需要編寫[subblocks addObject:[subblock copy]];
而不是簡單地[subblocks addObject:subblock];
下the clang documentation
描述進行,除了當前的語義保留作爲初始化__strong參數變量或閱讀__weak變量的一部分,每當這些語義調用來完成爲了保留塊指針類型的值,它具有Block_copy的效果。優化程序可能會在看到結果僅用作調用參數時刪除這些副本。
唯一倍,這是必要的複製塊,以確保它是在堆棧上不再是當塊被作爲參數傳遞給函數/方法具有__strong
參數可變,並通過當該塊正在從__weak
變量中讀取時。
當然,我可以考慮去做它的最佳方式。+1 – CodaFi
你是什麼意思「動態添加代碼到塊」?這與從「代碼」和原始塊中簡單地創建新塊有什麼不同?
如果不同之處在於您想要引用塊並且其行爲發生更改而不必爲該引用分配新塊,則可以使塊捕獲可變狀態,其中可變狀態可能包含要調用的塊,然後你可以改變,就像@NateChandler所建議的那樣。
如果不同之處在於您可以在幾個不同的「代碼」之間進行選擇,因此您無法在創建塊的位置對其進行硬編碼,那麼您只需製作「代碼段」成塊,並選擇正確的塊放入新的塊。
- 1. 添加JavaScript代碼來動態查看
- 2. 動態添加JavaScript代碼
- 3. Coinslider ...添加代碼來停止循環
- 4. 我需要代碼來取消阻止在excel vba中添加新工作表
- 5. Erlang啓動gen_server被阻止的代碼
- 6. jquery動態添加/刪除代碼段
- 7. 將html代碼動態添加到div
- 8. 動態子ID添加到IFRAME代碼
- 9. 動態添加HTML代碼通過JavaScript
- 10. JavaScript函數從動態添加代碼
- 11. 動態添加JavaScript代碼到頁面
- 12. 動態添加和運行VBA代碼
- 13. 向JS動態添加代碼
- 14. 添加代碼jQuery的動態
- 15. 添加RequiredFieldValidator來動態創建後面代碼中的控件
- 16. java代碼來創建html文件並動態添加行
- 17. 如何通過JavaScript動態添加html代碼來添加onclick事件?
- 18. 阻止查看源代碼
- 19. NodeJS導出阻止代碼
- 20. 客觀C阻止代碼
- 21. CSS動態照片阻止
- 22. 添加類的link_to阻止
- 23. iphone - 添加到阻止 - uitable
- 24. 動態添加按鈕和添加他們的源代碼
- 25. 動態加載代碼
- 26. 將啓動/停止功能添加到自動刷新代碼
- 27. 阻止來電
- 28. 阻止加載GIF動畫
- 29. ShowDialog沒有阻止執行代碼,但阻止用戶界面
- 30. 加載時觸發的代碼阻止頁面加載
不完全。但是,如果你願意,你可以嘗試嵌入腳本引擎,JavaScript核心或Lua是好的。 – 2012-12-28 21:42:08
動態製作封閉不是很容易... – CodaFi
無賴:-(...... –