block是帶有自動變量值的匿名函數。
1、函數指針是對一個函數位址的引用,這個函數在編譯的時候就已經确定了。而block是一個函數對象,是在程式運作過程中産生的。在一個作用域中生成的block對象配置設定在棧(stack)上,和其他所有配置設定在棧上的對象一樣,離開這個作用域,就不存在了。
2、blocks是inline的,并且它對局部變量是隻讀的。如果要修改就要加關鍵字:__block (注意,是兩個下劃線)。
3、作為函數的參數,blocks某種意義上替代了回調函數或者delegate。當函數調用了,假設某個事件觸發,這時blocks裡的内容就會運作。這樣有利于代碼的整合和閱讀,你不需要到處去實作委托方法了。