• Open Menu Close Menu
  • Apple
  • Shopping Bag
  • Apple
  • Mac
  • iPad
  • iPhone
  • Watch
  • TV
  • Music
  • Support
  • Search apple.com
  • Shopping Bag

Lists

Open Menu Close Menu
  • Terms and Conditions
  • Lists hosted on this site
  • Email the Postmaster
  • Tips for posting to public mailing lists
Re: ObjectAlloc and objects that should have been released
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: ObjectAlloc and objects that should have been released


  • Subject: Re: ObjectAlloc and objects that should have been released
  • From: John Pannell <email@hidden>
  • Date: Mon, 4 May 2009 17:44:32 -0600

Hi Miles-

This may not be your issue, but I know it has bitten me a few times... a common tool in tracking down over-released memory is to set NSZombieEnabled. I sometimes end up setting this in the early, crashy stages of my development and then forget to disable this in the later, performy/profiley stages of development. If NSZombieEnabled is left on, much leaking ensues.

Later!

John

On May 1, 2009, at 9:32 AM, Miles wrote:

Hi guys-
I'm still really struggling with this. I keep creating the most simple
examples I can and ObjectAlloc continues to show objects as 'created and
still living' when they really shouldn't be. At this point I would probably
just assume it's a bug in ObjectAlloc or elsewhere but over time my app is
using more memory so I do have issues to track down. This issues I'm seeing
make it really hard to narrow them down.


For example, I have created a new project where the delegate creates and
immediately releases a view controller that doesn't have anything in it at
all. Object alloc still shows a handful of objects as created and still
living, such as:


# Object Address Category Creation Time Size Responsible
Library Responsible Caller
1877 0x527c30 GeneralBlock-32 00:01.444 32 ObjectAllocTest
-[ObjectAllocTestAppDelegate applicationDidFinishLaunching:]
1878 0x527540 GeneralBlock-128 00:01.444 128
ObjectAllocTest -[ObjectAllocTestAppDelegate
applicationDidFinishLaunching:]
1879 0x5085f0 GeneralBlock-128 00:01.409 128
ObjectAllocTest start
1880 0x50ca20 GeneralBlock-48 00:01.446 48 ObjectAllocTest
-[MainViewController dealloc]
1881 0x5295c0 GeneralBlock-32 00:01.444 32 ObjectAllocTest
-[ObjectAllocTestAppDelegate applicationDidFinishLaunching:]
1882 0x50ab10 GeneralBlock-48 00:01.446 48 ObjectAllocTest
-[MainViewController dealloc]
1883 0x529970 GeneralBlock-32 00:01.444 32 ObjectAllocTest
-[ObjectAllocTestAppDelegate applicationDidFinishLaunching:]
1884 0x1013000 GeneralBlock-1536 00:01.444 1536
ObjectAllocTest -[ObjectAllocTestAppDelegate
applicationDidFinishLaunching:]


All of the ones that say "[ObjectAllocTestAppDelegate
applicationDidFinishLaunching:]" point to the line where I create mainMVC.
The ones that say to "[MainViewController dealloc]" point to "[super
dealloc]" (which seems very odd)


*Here's the entire appDelegate:*

#import "ObjectAllocTestAppDelegate.h"
#import "MainViewController.h"

@implementation ObjectAllocTestAppDelegate

@synthesize window;

- (void)applicationDidFinishLaunching:(UIApplication *)application {

   mainVC                = [[MainViewController alloc] init];
   [mainVC release];
   mainVC = nil;

   [window makeKeyAndVisible];
}


- (void)dealloc { NSLog(@"dealloc delegate"); [mainVC release]; [window release]; [super dealloc]; }


@end


*And here's the entire view controller:*


#import "MainViewController.h"

@implementation MainViewController

-(void)loadView {
}

- (id)init {
   if (self = [super init]) {}
   return self;
}

- (void)didReceiveMemoryWarning {
   [super didReceiveMemoryWarning];
}

- (void)dealloc {
   NSLog(@"dealloc mvc");
   [super dealloc];
}


@end





On Sun, Apr 26, 2009 at 12:55 PM, Miles <email@hidden> wrote:


Wow. In that particular example it was '[UIScreen mainScreen]
applicationFrame' that was causing the problem. When I changed that to a
CGRectMake, the view was not longer living once I released it. Does
'[UIScreen mainScreen] applicationFrame' cause some sort of caching issue?


Now I'm at a point where this is keeping the view around longer than I
think it should:


NSDictionary *rootDict = [[NSDictionary alloc] initWithContentsOfFile:
filePath];
[rootDict release];


Could someone please explain what this is all about?

Thanks!




On Sun, Apr 26, 2009 at 12:16 PM, Miles <email@hidden> wrote:


I've narrowed this down to the smallest case I can.

I have a method that loads a view and immediately releases it:

   UIWindow *win                    = [UIApplication
sharedApplication].keyWindow;
   TestVC *test = [[TestVC alloc] init];
   [win addSubview:test.view];
   [test.view removeFromSuperview];
   [test release];

And here is the entire TestVC class:

#import "TestVC.h"

@implementation TestVC

- (id)init
{
   self = [super init];
   if (self){}
   return self;
}

// Implement loadView to create a view hierarchy programmatically, without
using a nib.
- (void)loadView {


   UIView *contentView = [[UIView alloc] initWithFrame:[[UIScreen
mainScreen] applicationFrame]];
   contentView.backgroundColor = [UIColor blackColor];
   contentView.autoresizesSubviews = YES;
   [contentView release];
}

- (void)didReceiveMemoryWarning {
   [super didReceiveMemoryWarning];
}

- (void)dealloc {
   [super dealloc];
}

@end


When I look in ObjectAlloc, TestVC points to the "UIView *contentView"
declaration as created and still living. Is this just an objectAlloc bug, or
is there some other sort of autorelease thing that goes on behind the
scenes? I don't see any reason why this would still be hanging around.


Ugh.








On Fri, Apr 24, 2009 at 7:18 PM, Miles <email@hidden> wrote:


Very interesting, I'll give all that a shot and report back. Thanks so
much!





On Apr 24, 2009, at 7:07 PM, Peter N Lewis <email@hidden> wrote:

On 25/04/2009, at 8:28 , Miles wrote:

I just mean that I'm adding some labels and images to the view. I have
quadruple checked that they are all being released, but I must be
overlooking something.



I doubt its your issue, but I recently had a problem like this that took
me far too long to track down.


The debugging technique I used was to override
retain/release/autorelease and dealloc and have them just call NSLog and
super, then set a breakpoint on each, add a backtrace "bt" debugging command
and set them to auto-continue.


Eventually, after much hair pulling I tracked it down to my
removeFromSuperview override neglecting to call super - ouch!

But one technique for finding this might be to make a trivial subclass
of UIImage that does the above and use it for logo.


One other possibility would be - does UIImage cache images created with
initWithContentsOfFile? The tehcnique above might tell you if thats what is
happening, because you should see UIImage system code adding it to an
array/dictiuonary/set and not releasing it later.


Enjoy,
Peter.

--
  Run macros from your iPhone with Keyboard Maestro Control!
      or take a break with Derzle for your iPhone

Keyboard Maestro <http://www.keyboardmaestro.com/> Macros for your Mac
Aragom Space War <http://www.stairways.com/iphone/aragom> Don't get
killed!
Derzle <http://www.stairways.com/iphone/derzle> Enjoy a relaxing
puzzle.
<http://www.stairways.com/> <http://download.stairways.com/ >





_______________________________________________

Cocoa-dev mailing list (email@hidden)

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:
This email sent to email@hidden




_______________________________________________

Cocoa-dev mailing list (email@hidden)

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:
This email sent to email@hidden

_______________________________________________

Cocoa-dev mailing list (email@hidden)

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:
This email sent to email@hidden


References: 
 >Re: ObjectAlloc and objects that should have been released (From: Miles <email@hidden>)

  • Prev by Date: Re: parsing a string into words
  • Next by Date: Re: NSTableView, 2mln rows, looks bad.
  • Previous by thread: Re: ObjectAlloc and objects that should have been released
  • Next by thread: Re: NSURLConnection unhappiness
  • Index(es):
    • Date
    • Thread