IOS學習之委託和block
阿新 • • 發佈:2019-01-24
轉載請註明出處
作者:小馬
這篇文章建議和前一篇一起看, 另外先弄清楚IOS的block是神馬東東。
委託和block是IOS上實現回撥的兩種機制。Block基本可以代替委託的功能,而且實現起來比較簡潔,比較推薦能用block的地方不要用委託。
本篇的demo和前一篇是同一個,可以到github上下載不同的版本, 原始碼下載地址:
https://github.com/pony-maggie/DelegateDemo
A類(timeControl類)的標頭檔案先要定義block,程式碼如下:
//委託的協議定義 @protocol UpdateAlertDelegate <NSObject> - (void)updateAlert; @end @interface TimerControl : NSObject //委託變數定義 @property (nonatomic, weak) id<UpdateAlertDelegate> delegate; //block typedef void (^UpdateAlertBlock)(); @property (nonatomic, copy) UpdateAlertBlock updateAlertBlock; - (void) startTheTimer; @end
A類的實現檔案,原來用委託的地方改成呼叫block:
- (void) timerProc
{
//[self.delegate updateAlert];//委託更新UI
//block代替委託
if (self.updateAlertBlock)
{
self.updateAlertBlock();
}
}
再來看看檢視類,實現block即可:
- (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. TimerControl *timer = [[TimerControl alloc] init]; timer.delegate = self; //設定委託例項 //實現block timer.updateAlertBlock = ^() { UIAlertView *alert=[[UIAlertView alloc] initWithTitle:@"提示" message:@"時間到" delegate:self cancelButtonTitle:nil otherButtonTitles:@"確定",nil]; alert.alertViewStyle=UIAlertViewStyleDefault; [alert show]; }; [timer startTheTimer];//啟動定時器,定時5觸發 }