On Aug 6, 2009, at 8:58 AM, Arie Pieter Cammeraat wrote:
NSColor * const kNiceBlueColor = [NSColor colorWithRed: 20 green: 20 blue: 240 alpha:1];

Don't assign autoreleased objects to global variables/global constants, please. The object will get autoreleased and the constant will point to the address of an object that is long gone. Stuff like that leads to bugs that are very hard to track down. (unless you're running with the garbage collector, then the code above is mostly OK).

The best appproach suggested so far is a category on NSColor where you implement:

+(NSColor*)    mySoylentGreen
{
static NSColor* sMySoylentGreen = nil; // Static var -- global that's invisible outside this method. Initialization only happens the first time.
    if( sMySoylentGreen == nil )
sMySoylentGreen = [[NSColor alloc] initWithCalibratedRed: 0 green: 1.0 blue: 0];
    return sMySoylentGreen;
}

Why do this?

1) It creates the color lazily, as needed, the first time someone uses it. If you create all your colors right at startup, this makes your app slower to start up. This way, the long startup wait is actually turned into many split-second waits distributed throughout the runtime of your program.

2) It's efficient, because the object in the sMzSoylentGreen variable is created exactly once and then re-used. If you used NSColor colorWithCalibratedRed:green:blue with the actual numbers in a loop, you would create a new object each time.

3) It is an "intentional leak". Usually, you would have to release an object created using an alloc/init call. But since it is in a global variable (sMySoylentGreen), you can always access it, and since you'll probably keep using it for the rest of your app's lifetime, you can let the OS recycle it along with all your app's memory when your application shuts down.

Hope that helps,
-- Uli Kusterer
"The Witnesses of TeachText are everywhere..."
http://www.zathras.de





_______________________________________________

Cocoa-dev mailing list ([email protected])

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 [email protected]

Reply via email to