Selector in objective c
2011-12-08 22:11 wihoho 阅读(382) 评论(0) 编辑 收藏 举报Quoted from http://www.roseindia.net/tutorial/iphone/examples/iphone-selector.html
Selector in Objective C
In short, Selector can either be a name of method or a message to an object when used in the source code. And SEL is the complied form of a Selector. Also remember that all methods with the same name have the same selector. We can also use use selector to invoke a method on object.
Let's find out the Iphone selector syntax given below..
selectorAppDelegate.h
#import <UIKit/UIKit.h> @interface selectorAppDelegate : NSObject <UIApplicationDelegate> { UIWindow *window; NSString *string; } @property (nonatomic, retain) IBOutlet UIWindow *window; @property (nonatomic, retain) NSString *string; @end
selectorAppDelegate.m
#import "selectorAppDelegate.h" @implementation selectorAppDelegate @synthesize window, string; - (void)applicationDidFinishLaunching:(UIApplication *)application { // Override point for customization after application launch [window makeKeyAndVisible]; NSString *str = @"HELLO, THIS IS NEELAM"; SEL sel = @selector(lowercaseString); NSString *lower = (([str respondsToSelector:sel]) ? @"YES" : @"NO"); NSLog (@"Responds to lowercaseString: %@", lower); if ([str respondsToSelector:sel]) //(lower == @"YES") NSLog(@"lowercaseString is: %@" , [str lowercaseString]); } - (void)dealloc { [window release]; [super dealloc]; } @end
As you can see in the code, SEL is the complied form of @Selector. A selector can be written as
SEL sel = @selector(lowercaseString);
lowercaseString will change all the uppercase string into the lower case.
On running the application it'll look like as given image:
Quoted from http://stackoverflow.com/questions/738622/selectors-in-objective-c
You have to be very careful about the method names. In this case, the method name is just "lowercaseString
", not "lowercaseString:
" (note the absence of the colon). That's why you're getting NO
returned, because NSString
objects respond to the lowercaseString
message but not the lowercaseString:
message.
How do you know when to add a colon? You add a colon to the message name if you would add a colon when calling it, which happens if it takes one argument. If it takes zero arguments (as is the case withlowercaseString
), then there is no colon. If it takes more than one argument, you have to add the extra argument names along with their colons, as in compare:options:range:locale:
.
You can also look at the documentation and note the presence or absence of a trailing colon.