Thanks
Thanks

Reputation: 40339

Is there a reason why I sometimes read in Books "layoutSubviews Method" and sometimes "drawRect: Method"?

I am wondering why in Books and Apple Documentation sometimes a Method has that colon as suffix, but sometimes not. I guess it means that if it has no colon, it has no parameter. On the other side, if it has a colon, it has exactly one parameter. Right or wrong?

Upvotes: 1

Views: 397

Answers (3)

Daniel Dickison
Daniel Dickison

Reputation: 21882

You're right that the trailing colon signifies a single parameter, and it's important to use the full including-colon name in code -- e.g. @selector(drawRect:)

However, while I can't find an example off hand, in prose, I believe you'll occasionally see methods written without the trailing colon just to make it read better. I know I do this when writing comments/documentation -- e.g. "Subclasses should customize the doFoo method" when I actually mean doFoo:. So, if you see method names in prose, it's probably a good idea to check in the header file or class reference documentation for the correct signature.

Upvotes: 1

Abizern
Abizern

Reputation: 150665

Objective-C refreshView: and refreshView are two different methods. The first takes one parameter, the other takes no paramaters. As you say.

This is important because that is the full name of the method, and you need to be able to write this correctly when passing selectors.

For example when showing a sheet:

- (void)beginSheet:(NSWindow *)sheet 
    modalForWindow:(NSWindow *)docWindow 
    modalDelegate:(id)modalDelegate 
    didEndSelector:(SEL)didEndSelector 
    contextInfo:(void *)contextInfo;

the didEndSelector is usually of the form:

- (void)sheetDidEnd:(NSWindow *)sheet 
    returnCode:(int)returnCode 
    contextInfo:(void *)contextInfo;

and so in the beginSheet method this will need to be passed to the didEndSelector parameter as:

@selector(sheetDidEnd:returnCode:contextInfo:);

Getting the signature of the selector wrong will lead to much late night head scratching while debugging.

Upvotes: 0

Craig Otis
Craig Otis

Reputation: 32094

That's correct, though it is an easy typo to make. You should always check the documentation to ensure the signature of any method to avoid any runtime errors.

A method with signature:

- (void)refresh

Will be used like:

[myObject refresh];

A method with signature:

- (void)refreshView:(UIView *)view

Will be used like:

[myObject refreshView:view];

And finally, a method with signature:

- (void)refreshView:(UIView *)view updateLabels:(BOOL)update

Will be used like:

[myObject refreshView:view updateLabels:YES];

Upvotes: 1

Related Questions