Re: Memory Managment (copys??)
Re: Memory Managment (copys??)
- Subject: Re: Memory Managment (copys??)
- From: Thomas Davie <email@hidden>
- Date: Sun, 6 Feb 2005 19:32:32 +0000
NSMutableArray* array = [[NSMutableArray alloc] init];
SOMEObject* object;
int i;
for (i = 0; i < 10; i++)
{
object = [[SOMEObject alloc] init];
[object setSomeProperty: i];
[array addObject: object];
[object release];
}
/* Do something with the array */
[array release];
This code will leak. You should replace the first line in the for
loop
with:
object = [[[SOMEObject alloc] init] autorelease];
You need to make sure that any local objects you use are (retain,
alloc, copy) / (autorelease, release) balanced.
Sorry, but it looks like you overlooked something. There are exactly 10
alloc's for the variable "object" and exactly 10 releases for it. There
is exactly one alloc for the variable "array" and 1 release for it. If
I replace the line as you suggest there will be 20 releases (10
releases and 10 autoreleases for the variable "object"), which will
cause a seg fault, as there are only 10 alloc's.
There are no leaks in that code.
I agree that there are no leaks, but there are 21 retains and 21
releases in the code.
The array is retained when you alloc it.
Each object is retained when you alloc it.
Each object is retained when you add it to the array
Each object is released when you release it
Each object, and the array is released when you release the array.
Bob
_______________________________________________
Do not post admin requests to the list. They will be ignored.
Cocoa-dev mailing list (email@hidden)
Help/Unsubscribe/Update your Subscription:
This email sent to email@hidden