Я запускаю Leaks в проекте, и он обнаруживает утечку памяти NSMutableDictionary, связанную со следующим кодом, который он помечает как Ответственный фрейм:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
Gallery *gallery = [self.galleries.galleries objectAtIndex:indexPath.row];
NSDictionary *userInfo = [NSDictionary dictionaryWithObject:gallery.name forKey:@"name"];
NSNotification *notification = [NSNotification notificationWithName:REQUEST_VIEW_GALLERY
object:self
userInfo:userInfo];
[self post:notification];
}
Во-первых, NSDictionary не выделен, нополученный автоматически выпущен через NSDictionary :: dictionaryWithObject: forKeys:, а во-вторых, это неизменный словарь, так как здесь может быть утечка?
Вот источник для основного объекта данных галереи:
#import "Gallery.h"
#import "Galleries.h"
#import "Image.h"
@implementation Gallery
@dynamic name;
@dynamic galleries;
@dynamic images;
//------------------------------------------------------------------------------
// Initialisation
//------------------------------------------------------------------------------
+(Gallery *)initWithName:(NSString *)name photos:(NSArray *)photos managedObjectContext:(NSManagedObjectContext *)managedObjectContext
{
NSFetchRequest *request = [[[NSFetchRequest alloc] init] autorelease];
request.entity = [NSEntityDescription entityForName:@"Gallery" inManagedObjectContext:managedObjectContext];
request.predicate = [NSPredicate predicateWithFormat:@"name = %@", name];
NSError *error = nil;
Gallery *gallery = [[managedObjectContext executeFetchRequest:request error:&error] lastObject];
if(!gallery && !error)
{
gallery = [NSEntityDescription insertNewObjectForEntityForName:@"Gallery"
inManagedObjectContext:managedObjectContext];
gallery.name = name;
}
for (NSDictionary *photo in photos)
{
Image *image = [Image initWithFlickrData:photo managedObjectContext:managedObjectContext];
[gallery addImagesObject:image];
}
return gallery;
}
//------------------------------------------------------------------------------
// Public
//------------------------------------------------------------------------------
- (void)addImages:(NSOrderedSet *)values
{
self.images = values;
}
- (void)addImagesObject:(Image *)value
{
NSMutableOrderedSet *mutableImages = [NSMutableOrderedSet orderedSetWithOrderedSet:self.images];
[mutableImages addObject:value];
self.images = [NSOrderedSet orderedSetWithOrderedSet:mutableImages];
}
- (void)removeImagesObject:(Image *)value
{
NSMutableOrderedSet *mutableImages = [NSMutableOrderedSet orderedSetWithOrderedSet:self.images];
[mutableImages removeObject:value];
self.images = [NSOrderedSet orderedSetWithOrderedSet:mutableImages];
[self.managedObjectContext deleteObject:value];
}
@end