Почему мой получатель собственности вызывает ошибку NSZombie? - PullRequest
0 голосов
/ 13 октября 2011

У меня есть сервисный объект с именем JSONNetworkUtility, и я храню его в своей модели как ivar, а также синтезируемое свойство с тем же именем, неатомарное и сохраняемое:

myNetworkUtility = [[JSONNetworkUtility alloc] initNetworkConnectionWithURL:urlString withQueryString:nil delegate:self];

Делегат включает два обратных вызова, один из которых networkUtility:didFailWithError:, а другой - networkUtility:didFinishWithData:. Странно то, что свойство вызывает некоторые странные ошибки:

- (void)networkUtility:(JSONNetworkUtility *)networkUtility didFinishWithData:(NSArray *)jsonArray
{
    NSLog(@"myNetworkUtility = %@", myNetworkUtility);
    // returns <JSONNetworkUtility: 0x3944450>

    NSLog(@"networkUtility = %@", networkUtility);
    // also returns <JSONNetworkUtility: 0x3944450>

    NSLog(@"self.myNetworkUtility = %@", self.myNetworkUtility);
    // fails and throws an NSZombie error!
}

Ошибка, которую я получаю в этой строке:

*** - [MyModel myNetworkUtility]: сообщение отправлено освобожденному экземпляру 0x148190

Я полностью в замешательстве! Есть какие-нибудь подсказки относительно того, почему он не работает на геттере? И почему он возвращает совершенно другой объект?

Причина, по которой я использую геттер, заключается в том, что я хотел использовать self.myNetworkUtility = nil, чтобы я мог писать поверх свойства с новым объектом, но я сократил его до этой трассы, и я все еще возникают проблемы ...

Спасибо!

1 Ответ

6 голосов
/ 13 октября 2011

Я думаю, что проблема в том, что MyModel освобожден.Когда вы обращаетесь к ivar, объекты все еще находятся в этом адресе памяти, память еще не повреждена.Но при отправке сообщения освобожденному «я» среда выполнения обнаруживает тот факт, что объект освобожден.

...