Hi Vijay,
Thanks for the response. The line [newBaddie attachManagerRef:self]; is passing itself (the baddie manager) to the Baddie instance so that when the Baddie has expired it can call [managerRef removeMe:self] which tells the manager to remove the Baddie from its array. I'm gathering this is the wrong way to do things. Am I correct is saying that because I passed the manager to the Baddie, the Baddie now has a pointer to the manager. So when the Baddie deallocs, it tries to release the manager as well? Thanks, Jon From: Vijay Malhan [mailto:[EMAIL PROTECTED] Sent: Friday, June 06, 2008 1:48 PM To: Jon Keon Cc: Cocoa Developer List Subject: Re: [Newbie] Proper class releasing On Fri, Jun 6, 2008 at 9:41 PM, Jon Keon <[EMAIL PROTECTED]> wrote: Hi All, I'm having a problem with creating new instances of classes after other instances of them have been released. I have a class called BaddieManager. In this class I have a NSMutableArray that holds instances of Baddies. So I create a new instance, place it my array and when the Baddies life expires, I remove it from the array. This then causes the instance to dealloc but then the next time I call my populateBaddies function the whole program crashes with no error message. Any help would be greatly appreciated. Thanks, Jon //populate the array with baddies -(void) populateBaddies { while (baddieCount < baddieLimit) { //Create a new instance of my baddie PBaddie *newBaddie = [[PBaddie alloc] init]; //add him to the view [gameView addSubview:newBaddie]; //give him a reference of the manager [newBaddie attachManagerRef:self]; What is the above method doing? I hope it is not retaining or releasing the reference it is keeping in it's dealloc method. That will cause a crash when next time this obj is accessed after releasing your *baddie object*. Normally to maintain a weak reference delegate pattern is used, where delegate is never retained or released. If you are doing that right, see if you get a crash log/stack trace or any logs in sys-console. - Vijay //animate him [newBaddie animateBaddie:NULL finished:0]; //add him to the array [pBaddieArray addObject:newBaddie]; //release the temp variable [newBaddie release]; //increment the count baddieCount = [pBaddieArray count]; } } //Removes the Baddie from the array and destructs him -(void) removeMe:(PBaddie *) pBad { //remove from the game view - we don't want to see it anymore [pBad removeFromSuperview]; //remove the baddie from the array (Causes the Baddies dealloc method to fire) [pBaddieArray removeObject:pBad]; //update the count baddieCount = [pBaddieArray count]; } _______________________________________________ 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/vijay.malhan%40gmail.co m This email sent to [EMAIL PROTECTED] _______________________________________________ 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]
