Когда я решаю эту потенциальную утечку с помощью автоматического выпуска, мое приложение вылетает, почему? - PullRequest
1 голос
/ 07 июля 2011

функция анализа сообщает мне, что здесь есть потенциальная утечка в mutableFetchResults:

- (NSMutableArray *) getBookmarks
{
NSFetchRequest *request = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Bookmark" inManagedObjectContext:managedObjectContext];
[request setEntity:entity];
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"title" ascending:YES];
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil];
[request setSortDescriptors:sortDescriptors];
[sortDescriptors release];
[sortDescriptor release];
NSError *error;
NSMutableArray *mutableFetchResults = [[managedObjectContext executeFetchRequest:request error:&error] mutableCopy];
[request release];


if (!mutableFetchResults) {
    NSLog(@"Error with fetch: %@", error );
    return nil;
}

return mutableFetchResults ;

}

Как это работает, но с предупреждением об утечке.
Когда я использую autorelease NSMutableArray *mutableFetchResults = [[managedObjectContext executeFetchRequest:request error:&error] mutableCopy];, мое приложение вылетает без журнала ошибок.
Как я могу найти проблему здесь?

- (id)init
{
self = [super init];
if (self) {

    coreDataManager = [[CoreDataManager alloc] initWithDelegate:self];
    bookmarks = [coreDataManager getBookmarks];
  }
return self;
}

Ответы [ 2 ]

1 голос
/ 07 июля 2011

Вам нужно сохранить все, что вы хотите сохранить, поэтому ваш init метод должен сохранить закладки:

bookmarks = [[coreDataManager getBookmarks] retain];

Затем вы можете автоматически освободить переменную mutableFetchResults перед ее возвратом.

Кроме того, соглашение об именовании Какао будет иметь метод getBookmarks с именем bookmarks. :)

0 голосов
/ 07 июля 2011

Что вы имеете в виду, когда говорите:

Когда я использую autorelease NSMutableArray * mutableFetchResults = [[managedObjectContext executeFetchRequest: ошибка запроса: & error] mutableCopy]; мое приложение вылетает без журнала ошибок.

... там нет авто-релиза. mutableCopy сохраняет копию вашего массива с счетом сохранения 1.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...