選取器,jquery選取器
==========================
選取器
==========================
【認識選取器】
SEL
1.選取器(SEL)是一個變數類型。
2.選取器用來裝成員訊息(成員方法)
people* manInBlack = [[people alloc]init];
// SEL 是一個選取器類型,好比int a,int 是一個整型
// 建立了一個選取器sel,sel裝了manInBlack中的printName方法
SEL sel = @selector(printName);
// 執資料列選取器
[manInBlack performSelector:sel];
// 執行一個帶參數的選取器方法
// 多了一個冒號
SEL sel1 = @selector(printName:);
[manInBlack performSelector: sel1 withObject: @"我是黑衣人,我會隱藏"];
// [manInBlack printName: @"我長大了" withAge: @"25歲"];
// 建立一個帶2個參數的選取器
SEL sel2 = @selector(printName:withAge:);
// 執行一個帶2個參數的選取器
[manInBlack performSelector: sel2 withObject: @"我長大了" withObject: @"5歲"];
//【注】選取器方法,最多帶2個參數
二.選取器的作用
1.選取器支援ios開發,事件的相應機制。
2.選取器可用於方法的回調(代理)
3.選取器可以另一個方法實現多個功能,實現代碼重用。
// 編譯時間確定調用哪個方法
SEL sel = @selector(test1);
// NSSelectorFromString 可以在運行時確定調用哪個方法
NSString* selectorStr = [NSString stringWithFormat:@"test%d",i];
// NSSelectorFromString 可以把字串轉成SEL方法
// NSSelectorFromString 是一個系統方法,可以把nsstring轉成SEL類型
SEL sel2 = NSSelectorFromString(selectorStr);
三.isKindofClass
【注】
1.用SEL聲明的變數來裝成員方法
2.用Class聲明的變數來裝類型
//把test這個方法裝入sel這個變數
SEL sel = @selector(test);
//把 book這個類型裝入las這個變數中
//Class這個是用來裝類的類型的一個類型
Class las = [book class];
NSArray* array = @[@"one", @"tow", mybook, @"jack"];
//[問]如何從array取出book這個類型的變數
for(id object in array)
{
//isKindOfClass 用來判斷object 這個對象是否是book 類型的
//isKindOfClass 用於判斷對象屬於哪個類
if ([object isKindOfClass: las]) {
NSLog(@"%@", object);
}
}
【動態建立類】
【注】用NSClassFromString可以實現動態建立,取出的這個類必須是當前工程中的類
//把一個NSString類型裝入Class所定義的變數
// 告訴編譯器在當前工程中去找名字是book.h book.m的類然後轉換成一個類型。轉換成一個book類型
// Class mybook = NSClassFromString(@"book");
// book * myFirstBook = [[mybook alloc]init];
NSMutableArray* tmpArr = [[NSMutableArray alloc]init];
NSArray* classNameArray = @[@"surperMan", @"food", @"book"];
for ( int i = 0; i < 3 ; i++ ) {
NSString* C_name = classNameArray[i];
// NSClassFromString 把字串所對應的類給取出來
// 前提條件是:取出的這個類必須是當前工程中的類,如果當前工程中不存在這個類
// 則返回nil
// 用NSClassFromString可以實現動態建立
Class myClass = NSClassFromString(C_name);
id obj = [[myClass alloc]init];
[tmpArr addObject:obj];
}
動態建立類好處非常多
1.大大簡化了代碼量
2.使程式功能更加強大
3.節約程式的記憶體