On May 21, 2008, at 9:49 AM, Gérard Iglesias wrote:
with an empty NSArray (not very useful, since you can't add items to
an NSArray). Then, you leak that allocated memory by setting cityArray
to an autoreleased NSArray

In fact it is not leaking, it is just creating an object for nothing, it will be released by the autorelease pool, than no leaks :)

Not quite.

The original code looked like this:

@implementation Controller
- (id) init
{
 cityArray = [[NSArray alloc] init];
 NSString *c0 = @"New York";  //Ten NSString objects created here
 ...
 NSString *c9 = @"Virginia Beach";
 cityArray = [NSArray arrayWithObjects: c0, ...c9, nil];
 return self;
}
@end

And, in fact, it would leak the initial empty NSArray instance.

(And, as others have pointed out, the second instantiation of an NSArray through the +arrayWithObjects: method returns an autoreleased object, thus leading to a crash.)

Personally, whenever I have lists of static strings like this, I move 'em into the projects Info.plist and then get a hold of the strings via [[NSBundle mainBundle] infoDictionary]. Or stick 'em in a plist file in resources. Much easier to change/maintain over time.

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 [EMAIL PROTECTED]

Reply via email to