Object C學習筆記18-SEL,@ selector,Class,@class

  本章是對上一章<<Object C學習筆記17-動態判斷和選擇器>>的一點補充,因此比較簡單點。html

 

  一. SEL 類型函數

    在上一篇介紹了幾個方法,都只是介紹了其使用方式可是沒有具體介紹參數:學習

- (id)performSelector:(SEL)aSelector;
- (id)performSelector:(SEL)aSelector withObject:(id)object;
- (id)performSelector:(SEL)aSelector withObject:(id)object1 withObject:(id)object2;
- (BOOL)respondsToSelector:(SEL)aSelector;

    其中有看到SEL類型。SEL至關於函數指針。下面介紹performSelector方法:spa

    [對象 performSelector:SEL變量 withObject:參數1 withObject:參數2]; 
在調用respondsToSelector:@selector(method)時,這個method只有在該方法存在參數時須要 ":",若是該方法不須要參數就不須要加這個冒號。不然,編譯不會報錯,只是執行返回的值不對。固然若是方法有多個參數,須要多個冒號,參數有名稱的須要帶上參數名稱。 
指針

 

  二. @selector code

    @selector 其實就是選擇器,使用@selector放回SELleixing,因此SEL和@selector通常都是同時使用的。orm

SEL sel=@selector(write:andAge:);

    @selector方法用法如上,可是這裏要注意一下若是方法有輸入參數則須要使用: ,若是沒有參數則不要:xml

SEL sel1=@selector(eat);

    若是使用能夠參考上一章所述內容。htm

 

  三. Class對象

    先看看Class類型的代碼以下:

typedef struct objc_class *Class;
typedef struct objc_object {
    Class isa;
} *id;

    從上面的代碼能夠看到Class 是結構類型,可使用以下方式獲取一個對象的Class

Class c=[Person class];

 

  四. @class

  因爲頭文件的相互包含及依賴關係,每每很小的改動就須要從新編譯不少的文件。Object-C提供了一種方法能夠減小因爲依賴引發的從新編譯:@class 來告訴編譯器這是一個類,編譯器只須要經過指針來引用它便可,並不須要知道關於這個類的更多信息。以此來減小編譯工做。

#import <Foundation/Foundation.h>
@class Person;
@interface Student : NSObject{
    Person *p;
}
@end

  經過以上代碼能夠看到,@class Person . 而後咱們在Student 類中就能夠直接引用Person這個類了。在以往的時候須要使用

  #import "Person.h" 才能夠。 咱們使用@class 替換以前的這種方式。

相關文章
相關標籤/搜索