使用线程释放实例异常

时间:2011-09-08 21:40:40

标签: objective-c

我在使用Objective-c编写的Mac应用程序时出现问题。 我有这种情况:

  1. 在主线程(GUI)中:
  2. 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之前声明):
    2. -(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 个答案:

答案 0 :(得分:1)

听起来您初始化时可能没有正确保留m_completeSearchWord。如果您需要帮助确认,请添加-setParameters的正文。

答案 1 :(得分:0)

在新线程中调用选择器时,请确保选择器已使用自动释放池正确包装:

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

当我忘记添加游泳池时,我会看到各种与记忆相关的问题,你的错误肯定会响起。