Сообщение отправлено освобожденному экземпляру, который никогда не был освобожден - PullRequest
1 голос
/ 11 апреля 2010

Я начал иметь дело с NSOperations и (как обычно с параллелизмом) наблюдаю странное поведение. В моем классе у меня есть переменная экземпляра:

    NSMutableArray *postResultsArray;

при нажатии одной кнопки в пользовательском интерфейсе я инициализирую массив:

postResultsArray = [NSMutableArray array];

и настройте операции (вместе с зависимостями).

В операциях я создаю пользовательский объект и пытаюсь добавить в массив:

PostResult *result = [[PostResult alloc] initWithServiceName:@"Sth" andResult:someResult];
[self.postResultsArray addObject:result];

и при добавлении я получаю:

- [CFArray retain]: сообщение отправлено на освобожденный экземпляр 0x3b40c30

, что странно, поскольку я нигде не освобождаю массив в своем коде (я сделал, но когда проблема начала появляться, я прокомментировал все операции освобождения, чтобы быть уверенным, что это не так). Я также имел @synchronized раздел, как показано ниже:

PostResult *result = [[PostResult alloc] initWithServiceName:@"Sth" andResult:someResult];
    @synchronized (self.postResultsArray) {
        [self.postResultsArray addObject:result];
    }

но проблема была та же (однако ошибка была для синхронизированной операции).

Есть идеи, что я могу делать не так?

1 Ответ

2 голосов
/ 11 апреля 2010
postResultsArray = [NSMutableArray array];

[NSMutableArray array] - удобный метод, эквивалентный [[[NSMutableArray alloc] init] autorelease]. Так что там есть неявный (авто) релиз. Так как вы собираетесь сохранить его, вы должны использовать одно из этих 3 изменений:

  1. postResultsArray = [[NSMutableArray array] retain];
    
  2. postResultsArray = [[NSMutableArray alloc] init];
    
  3. Используйте тот факт, что установщик должен сохранить новое значение (если вы объявите как @property(retain)):

    self.postResultsArray = [NSMutableArray array];
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...