我在使用Objective-c编写的Mac应用程序时出现问题。 我有这种情况:
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];
-(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
答案 0 :(得分:1)
听起来您初始化时可能没有正确保留m_completeSearchWord
。如果您需要帮助确认,请添加-setParameters
的正文。
答案 1 :(得分:0)
在新线程中调用选择器时,请确保选择器已使用自动释放池正确包装:
-(void) setTotalResult {
NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init];
...
[pool release];
}
当我忘记添加游泳池时,我会看到各种与记忆相关的问题,你的错误肯定会响起。