代码改变世界

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.