线程释放实例异常



我在用Objective-c编写Mac应用程序时遇到了一个问题。我有这样的情况:

    在主线程(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. In child (fengine先前声明的):
-(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

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

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

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

当我忘记添加池时,我看到了各种与内存相关的问题,你的错误肯定会让我想起。

最新更新