• 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: NSMutableDictionary autorelease chrashes application
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: NSMutableDictionary autorelease chrashes application


  • Subject: Re: NSMutableDictionary autorelease chrashes application
  • From: Robert Martin <email@hidden>
  • Date: Fri, 18 Jul 2008 10:25:44 -0400

In the code you provide, the first line allocates a brand new dictionary and assigns it to vAttributes.

In the next line, you reassign vAttributes to the contents of your iVar dictionary. Nothing points to that alloc'd dictionary in the first line anymore.

Since vAttributes now points to an autoreleased dictionary, attempting to release it will cause a crash.

Try something along these lines instead:

- (NSString *)descriptionByColorCode:(int)colorCode
{
NSDictionary * vAttributes = [vColors objectForKey:[NSNumber numberWithInt:colorCode]];
return [vAttributes objectForKey:@"colorDescription"];
}



On Jul 18, 2008, at 9:48 AM, Matthias Arndt wrote:

Hi!

I'm a rookie with Cocoa development, please excuse if this question is stupid, but I'm struck with memory management (an even Aaron's book doesn't help me):

In a method I use a (temporary) dictionary "vAttributes" to read an object from an instance variable "vColors" (a dictionary, too):

- (NSString *)descriptionByColorCode:(int)colorCode
{
NSMutableDictionary *vAttributes = [[NSMutableDictionary alloc] init];

vAttributes = [vColors objectForKey:[NSNumber numberWithInt:colorCode]];
return [vAttributes objectForKey:@"colorDescription"];
}


It is my understanding, that after the "alloc" message "vAttributes"' retain count is 1 and as I use it in the return statement, a "release" out of question. So "vAttributes" should receive an "autorelease" message before the return statement to avoid an object leak, but than the application crashes after the first invokation of this method.

... where am I wrong?

_______________________________________________

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


  • Follow-Ups:
    • Re: NSMutableDictionary autorelease chrashes application
      • From: Matthias Arndt <email@hidden>
References: 
 >NSMutableDictionary autorelease chrashes application (From: Matthias Arndt <email@hidden>)

  • Prev by Date: Re: NSMutableDictionary autorelease chrashes application
  • Next by Date: Re: Controlling Preferences on iPhone
  • Previous by thread: Re: NSMutableDictionary autorelease chrashes application
  • Next by thread: Re: NSMutableDictionary autorelease chrashes application
  • Index(es):
    • Date
    • Thread