self.tableView.delegate = self и self.table.dataSource = собственная утечка памяти

У меня есть следующие коды с утечкой памяти на устройстве. Не могли бы вы помочь проверить это? Спасибо.

@interface NewsListViewController : UIViewController<UITableViewDataSource, UITableViewDelegate> {

@private
  UITableView *tableView;
  NSFetchedResultsController *fetchedResultsController;
......

}

@property (nonatomic, retain, readonly) NSFetchedResultsController *fetchedResultsController;

@end



@implementation NewsListViewController {

......

 - (void)dealloc {
    [fetchedResultsController release];
 fetchedResultsController = nil; 

    tableView.delegate = nil;
 tableView.dataSource = nil;
 [tableView release];
 tableView = nil;

    [super dealloc];
 }

 -(void)viewDidLoad {

......

  tableView.delegate = self;   // **leak here**

  tableView.dataSource = self; // **leak here**
  DemoAppDelegate *appDelegate = (DemoAppDelegate *)[UIApplication sharedApplication].delegate;
 [[NSNotificationCenter defaultCenter] addObserver:self
           selector:@selector(handleSaveNotification:)
         name:NSManagedObjectContextDidSaveNotification
          object:appDelegate.managedObjectContext];

[самовывоз];

}

- (void)fetch {

NSError * error = nil; BOOL success = [self.fetchedResultsController performFetch: & error]; if (! success) {debugLog (@ "Необработанная ошибка при выполнении выборки:% @", [error localizedDescription]); NSAssert1 (0, @ "Необработанная ошибка при выполнении выборки:% @", [error localizedDescription]); } [tableView reloadData];

}

 - (NSFetchedResultsController *)fetchedResultsController {

если (fetchedResultsController == nil) {NSFetchRequest * fetchRequest = [[[NSFetchRequest alloc] init] autorelease];

DemoAppDelegate * appDelegate = (DemoAppDelegate *) [UIApplication sharedApplication] .delegate; [fetchRequest setEntity: [NSEntityDescription entityForName: @ "Новости" inManagedObjectContext: appDelegate.managedObjectContext]];

fetchedResultsController = [[выделение NSFetchedResultsController] initWithFetchRequest: fetchRequest managedObjectContext: appDelegate.managedObjectContext sectionNameKeyPath: nil cacheName: @ "NewsCache"];

}

return fetchedResultsController; }

 - (void)handleSaveNotification:(NSNotification *)aNotification {

DemoAppDelegate * appDelegate = (DemoAppDelegate *) [UIApplication sharedApplication] .delegate; [appDelegate.managedObjectContext mergeChangesFromContextDidSaveNotification: aNotification]; [самовывоз]; }

 - (UITableViewCell *)tableView:(UITableView *)table cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    News *news = [fetchedResultsController objectAtIndexPath:indexPath];

    // fill cell.label.text according to the news field value

 }   

 @end

person mobguang    schedule 10.09.2010    source источник
comment
С чего вы взяли, что это утечка? Нам нужно больше кода и информация об утечках объектов.   -  person Eiko    schedule 10.09.2010


Ответы (1)


Астрономически маловероятно, что установка свойства delegate или dataSource экземпляра UITableView может вызвать заметную утечку памяти.

Вам следует более тщательно изучить окружающий код.

person Ryan    schedule 10.09.2010
comment
@Eiko, Райан, спасибо за ответ, я добавил более подробный код, я использовал основные данные для предоставления данных для ячейки в tableView, я понятия не имею, почему произошла утечка. Не могли бы вы помочь проверить это? Заранее спасибо! - person mobguang; 11.09.2010
comment
Больше кода - это хорошо, но его все еще недостаточно. Вы освобождаете и сохраняете все должным образом. Как ранее спросила Эйко: почему вы думаете, что это утечка? Вы использовали инструменты, чтобы проверить это? - person Ryan; 11.09.2010
comment
да, прибор указывает на утечку. Но ответственная библиотека - это UIKit, а не мое приложение, могу ли я ее игнорировать? Спасибо. - person mobguang; 11.09.2010