• Open Menu Close Menu
  • Apple
  • Shopping Bag
  • Apple
  • Mac
  • iPad
  • iPhone
  • Watch
  • TV
  • Music
  • Support
  • Search apple.com
  • Shopping Bag

Lists

Open Menu Close Menu
  • Terms and Conditions
  • Lists hosted on this site
  • Email the Postmaster
  • Tips for posting to public mailing lists
Re: best practices for object instance initialization
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: best practices for object instance initialization


  • Subject: Re: best practices for object instance initialization
  • From: Andy Lee <email@hidden>
  • Date: Fri, 21 Mar 2008 21:22:15 -0400

On Mar 21, 2008, at 4:07 PM, Stuart Malin wrote:
1) Do I just let -init dangle (so to speak)? and then if I ever forget that the object needs special initialization and instead call -init, the code will end up failing down the line somewhere where those initialization parameters matter...

2) Do I define a -(init) method and have it throw an exception? so that I'll find out right away if some code invokes -init rather than -initWithParams....

This is the approach I take when I care about non-designated initializers, except I log a message instead of throwing an exception (though maybe I should consider throwing an exception). I define the following macro:


#define DIGSLogNondesignatedInitializer()\
do {\
    {\
        if (DIGSGetVerbosityLevel() >= DIGS_VERBOSITY_ERROR)\
            DIGSLogError(\
                @"%@ -- '%@' is not the designated initializer",\
                [self class],\
                NSStringFromSelector(_cmd));\
    }\
} while (0)

(DIGSLogError() and DIGSGetVerbosityLevel() are other macros of mine.)

I put this macro in any init method that should not be called. For example:

- (id)initWithDatabase:(AKDatabase *)db
{
    DIGSLogNondesignatedInitializer();
    [self dealloc];
    return nil;
}

I considered putting the "[self dealloc];" and "return nil;" in the macro too, since they always appear after the DIGSLogNondesignatedInitializer() line. Not sure why I didn't do that -- maybe I will at some point.

3) Is there some way to tell the compiler to ignore the superclasses's -init for the subclass so that I get a compile time error? This would be my preferred outcome.

No, and you really wouldn't want the ability to subvert inheritance semantics this way. The nearest thing I know of to what you want is Java's approach to constructors. But -init is a regular method; there are no constructors in Objective-C.


--Andy

_______________________________________________

Cocoa-dev mailing list (email@hidden)

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:
This email sent to email@hidden


References: 
 >best practices for object instance initialization (From: Stuart Malin <email@hidden>)

  • Prev by Date: View with sliding rearranging thumbnails
  • Next by Date: Re: Sync Services between Address Book and a web server
  • Previous by thread: best practices for object instance initialization
  • Next by thread: NIB files on 10.1
  • Index(es):
    • Date
    • Thread