EXC_BAD_ACCESS с NSAutoReleasePool - PullRequest
       10

EXC_BAD_ACCESS с NSAutoReleasePool

0 голосов
/ 31 марта 2010

Я отрываю новую тему

[NSThread detachNewThreadSelector:@selector(loadAvatar) toTarget:self withObject:nil];

Я получаю EXC_BAD_ACCESS на

STObject* st = [cellitem get:@"stobject"];

В моем следующем методе

-(void)loadAvatar
{   

    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
    STObject* st = [cellitem get:@"stobject"];
    //do stuff...
    [pool release];
}

Я пытался сохранить st, но не повезло. Когда я запускаю этот код без отсоединения нового потока, у меня нет проблем. Я не совсем уверен, чего мне не хватает.

UPDATE cellitem - это подкласс NSObject, который содержит некоторые свойства, такие как словарь и строки.

Метод get возвращает строку из словаря

Ответы [ 2 ]

3 голосов
/ 31 марта 2010

Сохранение st не принесет вам большой пользы, так как ошибка EXC_BAD_ACCESS возникает до того, как произойдет назначение. Проблема заключается либо в доступе к cellItem, либо в вашем методе get. В любом случае вы, вероятно, пытаетесь получить доступ к объекту, который уже был освобожден. Попробуйте запустить инструменты с включенным обнаружением зомби .

1 голос
/ 31 марта 2010

Не совсем уверен, почему это решение работает, но я велел моему потоку спать в течение 0,1 секунды, и, похоже, он решил все проблемы.

    [NSThread detachNewThreadSelector:@selector(loadAvatar) toTarget:self withObject:nil];
    [NSThread sleepForTimeInterval:0.1];

Кто-нибудь знает, почему это так? Я предполагаю, что сон препятствует тому, чтобы какой-то объект был выпущен слишком рано? Может быть хакерское исправление.

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