[fout] memory leak




Interesting Products to iphone, iphone 3G and iphone 3GS



Als je een “Build and Analyze” uitvoert, levert xCode de mogelijke memory leaks die zich kunnen voordoen.

Echter zijn er omstandigheden waarbij je een variabele creëert en die wel wil behouden, bijvoorbeeld om door te geven als parameter.

vb.

- (NSMutableArray *)haalAlleGeordendeAfspraken{
	NSFetchRequest *vraag = [[NSFetchRequest alloc] init] ;
	NSEntityDescription *entiteit = [NSEntityDescription entityForName:@"Afspraak" inManagedObjectContext:[self managedObjectContext]];
	[vraag setEntity:entiteit];
	[vraag setReturnsObjectsAsFaults:NO];  // toegevoegd om foutmeldingen te mijden

	NSSortDescriptor *sorteerbeschrijving = [[NSSortDescriptor alloc] initWithKey:@"afspraakBegintijd" ascending:YES] ;
	NSArray *sorteerbeschrijvers = [[NSArray alloc] initWithObjects:sorteerbeschrijving,nil] ;
	[vraag setSortDescriptors:sorteerbeschrijvers];

	NSError *error =nil;
	NSMutableArray *result = [[[self managedObjectContext] executeFetchRequest:vraag error:&error] mutableCopy];// autorelease];
	[vraag release];
	[sorteerbeschrijving release];
	[sorteerbeschrijvers release];
//	[entiteit release];

	return result;
}

In dat geval wil je “result” teruggeven, maar je kan het dus niet autoreleasen, noch een release plaatsen.

Hier komt dan de naamgevingconventie wel de oplossing bieden:

You take ownership of an object if you create it using a method whose name begins with “alloc” or “new” or contains “copy” (for example, alloc, newObject, or mutableCopy), or if you send it a retain message. You are responsible for relinquishing ownership of objects you own using release or autorelease. Any other time you receive an object, you must not release it.

dus, je kan dit eenvoudig oplossen door ‘haalAlleGeordendeAfspraken' te vervangen door 'copyAlleGeordendeAfspraken'

ref : deze blog



Leave a Reply