iOS學習日記(十二)目標-動作對

回調是將一段可執行的代碼和一個特定的事件綁定起來,當特定的事件發生時,就會執行這段代碼

下面介紹OC中實現回調的一種方式-目標動作對。
在程序開始等待前,要求當某事發生時向指定對象發送某個特定的消息,這裏接收消息的對象是目標(target),消息的選擇器(selector)是動作(action)。

一 運行循環
事件驅動的程序需要有一個對象,專門負責等待事件的發生。有一個名爲NSRunLoop的類,會持續等待着。

實例代碼如下
在這裏插入圖片描述
只需這樣,運行循環就會等待,程序沒有結束,要手動選擇product -> stop 結束程序

二 目標動作對

下面要創建一個擁有NSRunLoop對象和NSTimer對象的程序。每隔兩秒,NSTimer對象會向其目標發送指定的動作消息。此外還要創建一個BNRLogger類,這個類的實例將被設置爲NSTimer對象的目標。

在BNRLogger.h中聲明如下


@interface BNRLogger : NSObject
@property(nonatomic) NSDate *lastTime;
- (NSString *)lastTimeString;
- (void)updateLastTime:(NSTimer *)t;
@end

動作方法總是有一個實參,它是傳入發送動作消息的那個對象。本例傳入的是NSTimer對象。

在BNRLogger.m中實現方法。

#import "BNRLogger.h"

@implementation BNRLogger

- (NSString *)lastTimeString{
    static NSDateFormatter *dateFormatter=nil;
    if(!dateFormatter)
    {
        dateFormatter=[[NSDateFormatter alloc] init];
        [dateFormatter setTimeStyle:NSDateFormatterMediumStyle];
        [dateFormatter setDateStyle:NSDateFormatterMediumStyle];
        NSLog(@"created dateFormatter");
    }
    return [dateFormatter stringFromDate:self.lastTime];
}

- (void)updateLastTime:(NSTimer *)t{
    NSDate *now=[NSDate date];
    [self setLastTime:now];
    NSLog(@"Just set time to %@",self.lastTimeString);
}

@end

在main.m文件中,創建一個BNRLogger實例,讓它成爲NSTimer的目標,動作設置爲updateLastTime

在這裏插入圖片描述
系統會每隔2.0秒,在控制檯輸出當前的日期時間。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章