我想了解塊的基本原理。我寫了這個簡單的測試:爲什麼這個基本的Objective C塊代碼不起作用?
NSString *(^print_block)() =^(NSString *returned_string){
return @"this block worked!";
};
NSLog(@"%@", print_block);
我預期的控制檯輸出"this block worked!"
,而是我得到錯誤號的大洪水等,,結尾:
terminate called throwing an exception
怎麼了?
編輯:答案已建議使用:
但是,這並不工作。程序在塊定義的開始處終止,控制檯僅說明(lldb)
,Xcode在塊定義處放一點綠色箭頭。箭頭寫着:
Thread 1: EXC_BAD_ACCESS (code=1, address=0x5f646e71)
我試過別的東西不工作:
NSString *(^print_block)() =^(NSString *returned_string){
NSString *return_me = @"this block worked!";
return return_me;
};
NSLog(@"%@", print_block);
但至少這不會終止程序。它運行良好。但是控制檯輸出仍然是錯誤的:
<__NSGlobalBlock__: 0x5a58>
嘗試的NSLog(@ 「%@」,print_block()); – Vatev 2012-07-27 16:21:32
不起作用。儘管如此,我沒有收到大量的錯誤信息,這看起來像是進步。但是代碼不會執行而終止。或者,我試過:'NSString *(^ print_block)()= ^(NSString * returned_string){NSString * return_me = @「this block worked!」;' 'return return_me; ' '};' '' 'NSLog(@「%@」,print_block);'現在,這並沒有給我任何錯誤,但它仍然無法正確工作。控制檯輸出應該是'this block working!',但是它是'<__ NSGlobalBlock__:0x5a58>'。 – 2012-07-27 16:25:50
格式化的抱歉,我不能讓這個迷你Markdown的東西正常工作,儘管我認爲我正在做它所說的。我在所有的代碼部分放了',但只有最後的代碼格式正確。我不能爲了我的生活換一個新的路線。幫助說在一行中添加兩個空格來創建一個新行。兩個空間似乎什麼都不做。無論如何,對不起。 – 2012-07-27 16:33:21