SEL是一種表示Objective-C中選擇器的類型。 @selector()關鍵字返回您描述的SEL。它不是一個函數指針,你不能傳遞任何對象或任何類型的引用。對於選擇器(方法)中的每個變量,必須在對@selector的調用中表示該變量。例如:
-(void)methodWithNoParameters;
SEL noParameterSelector = @selector(methodWithNoParameters);
-(void)methodWithOneParameter:(id)parameter;
SEL oneParameterSelector = @selector(methodWithOneParameter:); // notice the colon here
-(void)methodWIthTwoParameters:(id)parameterOne and:(id)parameterTwo;
SEL twoParameterSelector = @selector(methodWithTwoParameters:and:); // notice the parameter names are omitted
選擇器通常通過委派方法和回調來指定該方法應的特定對象上的回調過程中被調用。例如,當您創建一個計時器,回調方法具體定義爲:
-(void)someMethod:(NSTimer*)timer;
所以,當你計劃你可以使用@selector來指定哪些方法您的對象實際上將負責回調的計時器:
@implementation MyObject
-(void)myTimerCallback:(NSTimer*)timer
{
// do some computations
if(timerShouldEnd) {
[timer invalidate];
}
}
@end
// ...
int main(int argc, const char **argv)
{
// do setup stuff
MyObject* obj = [[MyObject alloc] init];
SEL mySelector = @selector(myTimerCallback:);
[NSTimer scheduledTimerWithTimeInterval:30.0 target:obj selector:mySelector userInfo:nil repeats:YES];
// do some tear-down
return 0;
}
在這種情況下,您指定每隔30秒用myTimerCallback向對象obj發送消息。
@Jim Puls--這實際上是一個Objective-C問題......對於可可或Cocoa-touch而言,它並不是特定於iPhone-sdk。此外,我們正在與objectivec標籤這些天:)目標c :) – 2008-11-18 02:57:28