On Fri, Jun 6, 2008 at 11:29 PM, Jon Keon <[EMAIL PROTECTED]> wrote: > 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? > Yes, if you are releasing that pointer in the dealloc. Also if you have retained the reference of your manager in baddie class, you'll get yourself in a retain cycle. So, I'll suggest you to review your design as suggested by Kyle. You can see Cocoa MVC documentation for more details. Thanks. Link: http://developer.apple.com/documentation/Cocoa/Conceptual/CocoaFundamentals/CocoaDesignPatterns/chapter_5_section_4.html
- Vijay > > > > > 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.com > > 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]
