Исключение выделенного экземпляра с потоками - PullRequest
0 голосов
/ 09 сентября 2011

У меня проблема с приложением для Mac, которое я пишу в Objective-c.У меня такая ситуация:

  1. В основном потоке (GUI):
ftEngine = [[FileT alloc] init];
[ftEngine setParameters:searchWord selectedEngine:[[pbEngines selectedItem] title] actualPage:0];
NSThread* thFileT = [[NSThread alloc] initWithTarget:ftEngine selector:@selector(setTotalResult) object:nil]; [thFileT start];
  1. На дочернем (ранее объявлено ftEngine):
-(void)setTotalResult {
    NSError* nsError = nil;
    NSURL* urlCompleteUrl = [NSURL URLWithString:m_completeSearchWord];
}

m_completeSearchWord инициализируется ранее использованной функцией setParameters.

А теперь .. моя проблема: Когда поток запускается, он вызывает setTotalResultи я получу исключение при попытке использовать m_completeSearchWord.

Странно, потому что, если я не использую поток, все работает правильно!

Исключение:

2011-09-08 23:24:06.731 GUI[12935:1a07] *** -[CFString respondsToSelector:]: message sent to deallocated instance 0x1003cc650

Ответы [ 2 ]

1 голос
/ 09 сентября 2011

Похоже, что вы, возможно, не сохранили m_completeSearchWord правильно, когда вы его инициализировали.Добавьте тело -setParameters, если вам нужна помощь в подтверждении этого.

0 голосов
/ 09 сентября 2011

При вызове селекторов в новом потоке, убедитесь, что селектор был правильно обернут в пул авто-релиза:

-(void) setTotalResult {
    NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init];
    ...
    [pool release];
}

Я вижу все проблемы с памятью, когда забываю добавить пул иВаша ошибка определенно звонит в колокол.

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