FROM : Jon Keon
DATE : Fri Jun 06 19:59:25 2008
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:vijay.<email_removed>]
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_removed>>
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_removed>)
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.<email_removed>
m
This email sent to vijay.<email_removed>
DATE : Fri Jun 06 19:59:25 2008
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:vijay.<email_removed>]
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_removed>>
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_removed>)
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.<email_removed>
m
This email sent to vijay.<email_removed>
| Related mails | Author | Date |
|---|---|---|
| Jon Keon | Jun 6, 18:11 | |
| Kyle Sluder | Jun 6, 19:18 | |
| Vijay Malhan | Jun 6, 19:48 | |
| Jon Keon | Jun 6, 19:59 | |
| Vijay Malhan | Jun 6, 20:13 |






Cocoa mail archive

