1. 程式人生 > >IOS學習之委託和block

IOS學習之委託和block

轉載請註明出處

作者:小馬


這篇文章建議和前一篇一起看, 另外先弄清楚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觸發
}