FROM : Julian Pellico
DATE : Mon Dec 20 20:04:30 2004
> Why do you check this in the first place? Do you suspect that there is
> a leak? What made you suspicious of that? Have you tracked it with
> ObjectAlloc?
Of course; otherwise I wouldn't be printing out retain counts. I do
exactly these things with the MyView:
- allocate a MyViewController which contains a MyView
- add the MyViewController to an array
- release the MyViewController
- make the MyView a subview of another custom view
- call removeFromSuperview on the MyView
- remove the MyViewController from the array
The MyViewController gets dealloc'ed, but the MyView doesn't.
>
> What if you write that method like this:
>
> - (void) removeMyViews
> {
> for (int i = 0; i < [myViewControllers count]; i++)
> {
> NSView *aView = [[myViewControllers objectAtIndex: i] view];
> NSLog(@"--- 1 --- %@ retainCount: %u, superview: %@", aView, [aView
> retainCount], [aView superview]);
> [aView removeFromSuperview];
> NSLog(@"--- 2 --- retainCount: %u, superview: %@", [aView
> retainCount], [aView superview]);
> }
> [myViewControllers removeAllObjects];
> }
>
> Does it make any difference if you replace "removeFromSuperview" with
> "removeFromSuperviewWithoutNeedingDisplay"?
I forgot to try these things when I was at home -- I'll do this tonight.
> My advice is always that you shouldn't try to track retain count like
> that. What if it's autoreleased?
It would hardly be safe for the frameworks to autorelease it. I might
want that NSView well past the end of the run loop.
DATE : Mon Dec 20 20:04:30 2004
> Why do you check this in the first place? Do you suspect that there is
> a leak? What made you suspicious of that? Have you tracked it with
> ObjectAlloc?
Of course; otherwise I wouldn't be printing out retain counts. I do
exactly these things with the MyView:
- allocate a MyViewController which contains a MyView
- add the MyViewController to an array
- release the MyViewController
- make the MyView a subview of another custom view
- call removeFromSuperview on the MyView
- remove the MyViewController from the array
The MyViewController gets dealloc'ed, but the MyView doesn't.
>
> What if you write that method like this:
>
> - (void) removeMyViews
> {
> for (int i = 0; i < [myViewControllers count]; i++)
> {
> NSView *aView = [[myViewControllers objectAtIndex: i] view];
> NSLog(@"--- 1 --- %@ retainCount: %u, superview: %@", aView, [aView
> retainCount], [aView superview]);
> [aView removeFromSuperview];
> NSLog(@"--- 2 --- retainCount: %u, superview: %@", [aView
> retainCount], [aView superview]);
> }
> [myViewControllers removeAllObjects];
> }
>
> Does it make any difference if you replace "removeFromSuperview" with
> "removeFromSuperviewWithoutNeedingDisplay"?
I forgot to try these things when I was at home -- I'll do this tonight.
> My advice is always that you shouldn't try to track retain count like
> that. What if it's autoreleased?
It would hardly be safe for the frameworks to autorelease it. I might
want that NSView well past the end of the run loop.
| Related mails | Author | Date |
|---|---|---|
| Julian Pellico | Dec 19, 08:29 | |
| j o a r | Dec 19, 09:51 | |
| Julian Pellico | Dec 20, 20:04 | |
| John C. Randolph | Dec 20, 20:50 | |
| mmalcolm crawford | Dec 20, 21:15 | |
| John C. Randolph | Dec 20, 22:26 |






Cocoa mail archive

