Begin forwarded message:
> From: Maxthon Chan <xcvi...@me.com> > Subject: Re: Protocols and the +initialize class method > Date: August 23, 2013 at 23:30:19 GMT+8 > To: Fritz Anderson <anderson.fr...@gmail.com> > > Well you can category on NSObject to perform the checking. > > Sent from my iPhone > >> On 2013年8月23日, at 21:28, Fritz Anderson <anderson.fr...@gmail.com> wrote: >> >>> On 23 Aug 2013, at 4:49 AM, Kevin Meaney <k...@yvs.eu.com> wrote: >>> >>> I have a protocol where I would like to include the class method >>> +(void)initialize as being required. This way all classes that conform to >>> the protocol have to implement initialize as part of the protocol. I >>> suppose I'm wondering if anyone perceives any problem with doing this? >>> >>> For example, will including +initialize as a required protocol method >>> interfere with objective-c automatically calling the initialize method >>> before the class is used for the first at runtime. >> >> The threshold question is whether the compiler will enforce the protocol as >> you wish. This is easy to test. The following code passes analysis and runs >> with no problem: >> >> ----- >> #import <Foundation/Foundation.h> >> >> @protocol NeedsInitialize <NSObject> >> >> + (void) initialize; >> - (void) mandatoryInstance: (NSString *) str; >> >> @end >> >> @interface NAImplementor : NSObject <NeedsInitialize> >> >> - (NSInteger) anotherMethod; >> >> @end >> >> @implementation NAImplementor >> >> - (void) mandatoryInstance:(NSString *)str >> { >> NSLog(@"%s gets string %@", __PRETTY_FUNCTION__, str); >> } >> >> - (NSInteger) anotherMethod >> { >> NSLog(@"%s sending -mandatoryInstance:", __PRETTY_FUNCTION__); >> [self mandatoryInstance: @"NAImplementor sends mandatory"]; >> return 12; >> } >> >> @end >> >> int main(int argc, const char * argv[]) >> { >> @autoreleasepool { >> NAImplementor * instance = [[NAImplementor alloc] init]; >> NSLog(@"%s implementor returns %li", __PRETTY_FUNCTION__, >> (long)[instance anotherMethod]); >> } >> return 0; >> } >> ----- >> >> As I understand it, you want to require NAImplementor to have >> +[NAImplementor initialize]. This code passes without this happening. It >> seems NSObject implements +initialize, which is good enough to satisfy the >> protocol. >> >> "Incomplete Objective-C Protocols," GCC_WARN_ALLOW_INCOMPLETE_PROTOCOL (Warn >> if methods required by a protocol are not implemented in the class adopting >> it. Only applies to Objective-C.), which is the closest warning I can find >> in short order to what you want, is set YES, so if the warning worked as you >> hope, it should have triggered. >> >> You might have the +load method of the class introspect to see if it >> implements +initialize, and throw an exception, but that requires a class >> hierarchy that defeats the purpose of a protocol. >> >> — F >> >> >> _______________________________________________ >> >> 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: >> https://lists.apple.com/mailman/options/cocoa-dev/xcvista%40me.com >> >> This email sent to xcvi...@me.com _______________________________________________ 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: https://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com This email sent to arch...@mail-archive.com