標籤:style blog http color io os ar 檔案 art
原文:http://blog.sina.com.cn/s/blog_9e8867eb0102uykn.html
這篇文章建議和前一篇一起看, 另外先弄清楚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;//blocktypedef 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觸發}
[IOS Block和delegate的對比]