2012-07-05 88 views
1

我正在開發一個庫到IOS,它在某些時候需要創建各種類的方法引用的NSArray。給某個班級打個電話。方法的參考

任何想法如何做到這一點?

感謝

回答

4

您有一些選擇。您可以使用NSStrings實際上有你的方法的名稱,然後就去做:

NSString *myMethodName = @"hellWorld"; 
SEL selector = selectorFromString(myMethodName); 

您可以選擇,然後添加到您的NSArray

您還可以使用NSInvocations和存儲的方法和後面定義目標:

一個NSInvocation的對象包含一個Objective-C 消息的所有元素:一個目標,一個選擇器,自變量,並且返回值。可以直接設置這些元素的每個 ,並在調度NSInvocation對象時自動將返回值設置爲 。

Apple Documentation

編輯1(爲它的樂趣):

- (Method *)getMethodsPointer{ 
    unsigned int number = 0; 

    Method *myMethods = class_copyMethodList([self class], &number); 

    //for(int i=0;i<number;i++) 
    // { 
    // printf("%s",sel_getName(method_getName(myMethods[i]))); 
    //} 
    return myMethods; 
} 
1

您可以選擇您array補充。你喜歡這個創建一個選擇:

-(void)myMethod:(int)something

SEL selectorToMyMethod = @selector(myMethod:);

希望它能幫助,乾杯!

+0

哦,我忘了SEL不是一個對象,但你總是可以將它們轉換爲一個,如下所示:[NSValue valueWithPointer:@selector(x)] – 2012-07-05 11:38:14

+0

我怎樣才能從另一個類中調用它? – DaSilva 2012-07-05 11:39:00

+0

您發送「performSelector」消息到您的對象:[myObject performSelector:@selector(selectorToMyMethod)]; – 2012-07-05 11:46:16

-1

您可以創建一些NSInvocations,存儲選擇器和目標類在裏面,並添加NSInvocation的到陣列。

只存儲選擇器是可能的,但前提是方法只在一個類中 - 因爲選擇器與它們的類無關。

+0

實際上,您可以在不響應對象的對象上調用選擇器。實際上你必須用'forwardInvocation:'來處理。這是創建多重繼承的一種方法。 – Peres 2012-07-05 11:46:10