I should have also mentioned -- now that I can :) -- that there is a
new pattern for declaring informal protocols that is pervasive across
the iPhone's UIKit.
Specifically, the use of @optional in an @protocol to declare all
methods in the protocol as optional.
For example, you could declare:
@protocol BobDelegate
@optional
- (void) fooBar: (Baz *) fred;
@end
@interface Bob:NSObject
{
id <BobDelegate> _delegate;
}
- (void) setDelegate: (id <BobDelegate>) aDelegate;
- (id <BobDelegate>) delegate;
@end
Thus, if you wanted to use an instance of MyClass as a delegate,
MyClass would have to be declared like:
@interface MyClass : NSObject <BobDelegate>
@end
MyClass doesn't have to actually implement *any* of the methods in
BobDelegate (if they are *all* marked @optional, anyway).
This pattern offers a couple of advantages:
(1) It is extremely precise in intention and scoping.
(2) The _delegate will *only* respond to methods declared in
BobDelegate (the compiler will warn for any others, even -description
and other NSObject methods). This is exactly correct.
(3) It gives you something to easily cmd-dbl-click in Xcode to see
what methods are contained in the protocol.
You can also mix-and-match @optional and @required methods. Consider
NSTableViewDataSource. It has two methods that are required and
several that are optional. This could be exactly declared via an
@protocol.
b.bum
_______________________________________________
Cocoa-dev mailing list (Cocoa-dev@lists.apple.com)
Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com
Help/Unsubscribe/Update your Subscription:
http://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com
This email sent to arch...@mail-archive.com