在iOS的開發過程中,Block的回調使用非常普遍,也是Block的重要用法之一。例如,當一段動畫播放完成后,執行一段代碼,當得到請求的網絡數據后,執行一段對數據的操作代碼等等。這些場景中,都使用到了Block的回調機制。Block的回調機制,可以使代碼的編寫變得十分的清晰,提升了代碼的可讀性。
1、定義帶Block參數的方法
創建一個Task類,繼承自NSObject;
在.h文件中,添加如下的方法,在該方法中,添加一個Block作為參數。其中,(void(^)(void))表示為一個沒有參數和返回值的Block。
#import
@interfaceTask:NSObject
-(void)beginTaskWithCallbackBlock:(void(^)(void))callbackBlock;
@end
2、設置Block的回調時機
在.m文件中,實現該方法。下面的代碼中,當方法被調用時,會打印一行Log,提示任務開始。3秒鐘后,會調用Block中的代碼。
#import "Task.h"
@implementationTask
-(void)beginTaskWithCallbackBlock:(void(^)(void))callbackBlock{
NSLog(@"Begin Task! After 3s Finish!");
dispatch_after(dispatch_time(DISPATCH_TIME_NOW,(int64_t)(3.0*NSEC_PER_SEC)),dispatch_get_main_queue(),^{
callbackBlock();
});
}
@end
3、使用Block定義動作/行為
在上面一段代碼的實現過程中,最關鍵的是定義了Block的調用時機,但沒有定義Block的代碼內容。Block中的代碼內容,可以在使用該方法時進行賦值。在下面的代碼中,當執行到Block時,打印一行日志,提示任務完成。
Task*task=[[Taskalloc]init];
[task beginTaskWithCallbackBlock:^{
NSLog(@"Task End!");
}];