I’m learning obj-c and I have a question about memory management:
Say I have a function that returns an NSDictionary, “fDictionary”,
NSDictionary *fDictionary {
NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:
[NSNumber numberWithInt:1], @"blah",nil];
return dict
}
that is called by a particular method:
-(int)fNumber {
NSDictionary *f = fDictionary();
return [[f objectForKey:@"blah"] intValue];
}
What I’m unclear about is how/where I should be releasing the NSDictionary object.
Should I release it in the method, or autorelease it in the function?
If the function was written properly, the dictionary is autoreleased, so you don’t have to release it at all. It will be released soon, by the autorelease pool.
You only release what you yourself retain or copy. These are the things you “own”. Be sure not to release them too early. The usual point is before the end of the function they are allocated or retained in, if they are local. If they are ivars, the best point is, usually, the dealloc of the class to which the ivar belongs.