标题:
@interface CodeTest : NSObject {
BOOL cancelThread;
}
-(void) testCode;
-(void) stopRunning;
-(void) startRunning;
@property (assign) BOOL cancelThread;
@end
实施:
-(void)stopRunning{
self.cancelThread = YES;
}
-(void)startRunning{
self.cancelThread = NO;
[NSThread detachNewThreadSelector:@selector(testCode) toTarget:self withObject:nil];
}
-(void)testCode{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
NSLog(@"STARTED");
/* Std C99 code */
while( conditions ){
if(self.cancelThread){
conditions = NO;
}
...
...
}
/* end of C code */
[pool release];
}
正如您所看到的,它厌倦了在单独的线程上执行testCode并在单独的线程中使用cancelThread BOOL作为停止执行标志。
我有以下问题:
self.cancelThread
无效(self未定义)。我认为,它试图将该语句解释为c代码,但这是obj-c。缺少什么?
更新:正如您之一建议的那样,它与丢失{}无关......代码在没有if(self.cancelThread){ conditions = NO; }
的情况下完美运行。
答案 0 :(得分:3)
- [CodeTest setCancelThread:]:无法识别的选择器。
表示您没有为cancelThread
属性定义的setter。你错过了
@synthesize cancelThread;
(在您的@implementation
部分)
答案 1 :(得分:1)
“/ *标准C99代码* /”是什么意思?
如果该代码确实被编译为C99代码,那么self.cancelThread
是有问题的,因为它是一个Objective-C表达式。首先,它相当于[self cancelThread], a method call and, secondly, it requires
self`,它不会出现在C99函数的主体中。
但是,鉴于您展示的代码在方法中有它,评论没有意义。