SEL, Objective-C'de bir seçiciyi temsil eden türdür. @selector() anahtar kelimesi, tanımladığınız bir SEL döndürür. Bu bir fonksiyon gösterici değildir ve herhangi bir nesneyi veya herhangi bir referansı geçemezsiniz. Seçicide bulunan her bir değişken için (yöntem), @selector çağrısında bunu temsil etmelisiniz. Örneğin:
-(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
Seçiciler genel yöntem temsilci geçirilir ve bir geri sırasında belirli bir nesne üzerinde adı gereken yöntem belirlemek için olan geri edilir. Eğer bir zamanlayıcı oluştururken Örneğin, geri çağırma yöntemi özellikle gibi tanımlanmıştır:
-(void)someMethod:(NSTimer*)timer;
Yani gerçekten callback'inde sorumlu olacak nesne üzerinde hangi yöntemin belirtmek için @selector kullanırsınız zamanlayıcı planladığımda:
@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;
}
Bu durumda nesne her 30 saniyede myTimerCallback messaged edilmesi obj olduğunu belirterek vardır.
@Jim Puls - bu aslında bir Objective-C sorunudur ... bu, iphone-sdk'a göre daha Kakao veya Kakao-touch'a özgü değildir. Ayrıca, bu günlerde objectivec üzerinden objektif-c etiketi ile gidiyoruz :) –