performSelector & @selector

Object-C中@selector關鍵字 是用來搜索方法的,將方法轉換成SEL類型的變量。

#import <Cocoa/Cocoa.h>

@interface Car : NSObject {
    int year;
    NSString *make;
    NSString *model;

}

@property (nonatomic,retain) NSString * model;
@property (nonatomic ,retain )NSString * make;
-(void) setMake :(NSString *)aMake  andModel:(NSString *) aModel;

@end


上面的代碼聲明瞭一個Car類,並且設置其中的兩個屬性爲非原子性的、自動生成getter方法(使用了@property)。

#import "Car.h"

@implementation Car:NSObject
@synthesize make;
@synthesize model;

-(void) setMake:(NSString *)aMake andModel:(NSString *)aModel{
    make=aMake;
    model=aModel;
}

@end

上面代碼是實現了Car類  ,使用了@synthesize關鍵字聲明 該屬性自動生成setter方法。

#import <Foundation/Foundation.h> 
#import "Car.h"

int main (int argc, const char * argv[]) {
        Car * myCar2=[[Car alloc]init];
    SEL carMethod=@selector(setMake:andModel:);
    [myCar2 performSelector:carMethod withObject:@"11111" withObject:@"2222"   afterDelay:10];
    NSLog(@"myCar shuxing : %@  ---%@",myCar2.make,myCar2.model);
}

這段代碼中@selector 搜索setMake方法 並返回SEL類型的變量。

格式如下:

SEL 變量名 =  @selector(方法名 :   第二個參數名 :  參數);

    [myCar2 performSelector:carMethod withObject:@"11111" withObject:@"2222" afterDelay:10];

這句話將搜索到的SEL類型的消息 發送給 myCar2對象。 performSelector關鍵字可以調用到SEL類型的變量。延遲十秒執行。

其語句格式如下:

[消息接受者     performSelector:SEL類型的變量    withObject:  第一個參數   withObject:  第二個參數   afterDelay :秒數];

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