这篇文章建议和前一篇一起看, 另外先弄清楚IOS的block是神马东东。
 
委托和block是IOS上实现回调的两种机制。Block基本可以代替委托的功能,而且实现起来比较简洁,比较推荐能用block的地方不要用委托。
 
本篇的demo和前一篇是同一个,可以到github上下载不同的版本, 源码下载地址:
https://github.com/pony-maggie/DelegateDemo
 
 
A类(timeControl类)的头文件先要定义block,代码如下:
 
- //委托的协议定义  
- @protocol UpdateAlertDelegate   
- - (void)updateAlert:(NSString *tltle);  
- @end  
-   
-   
-   
- @interface TimerControl : NSObject  
- //委托变量定义  
- @property (nonatomic, weak) id delegate;  
-   
-   
- //block  
- typedef void (^UpdateAlertBlock)(NSString *tltle);  
- @property (nonatomic, copy) UpdateAlertBlock updateAlertBlock;  
-   
- - (void) startTheTimer;  
-      
- @end  
 
 
 
A类的实现文件,原来用委托的地方改成调用block:
 
 
- - (void) timerProc  
- {  
-     //[self.delegate updateAlert:@"this is title"];//委托更新UI  
-     //block代替委托  
-     if (self.updateAlertBlock)  
-     {  
-         self.updateAlertBlock(@"this is title");  
-     }  
- }  
 
 
 
再来看看视图类,实现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 = ^(NSString *title)  
-     {  
-         UIAlertView *alert=[[UIAlertView alloc] initWithTitle:title message:@"时间到" delegate:self cancelButtonTitle:nil otherButtonTitles:@"确定",nil];  
-           
-         alert.alertViewStyle=UIAlertViewStyleDefault;  
-         [alert show];  
-     };  
-       
-       
-       
-     [timer startTheTimer];//启动定时器,定时5触发  
- }  
//"被委托对象"实现协议声明的方法,由"委托对象"调用 - (void)updateAlert:(NSString *title) {     UIAlertView *alert=[[UIAlertView alloc] initWithTitle:title message:@"时间到" delegate:self cancelButtonTitle:nilotherButtonTitles:@"确定",nil];          alert.alertViewStyle=UIAlertViewStyleDefault;     [alert show]; }