iPhone-Can';不要用循环杀死我的线程

iPhone-Can';不要用循环杀死我的线程,iphone,multithreading,Iphone,Multithreading,我在日志中看到“killThread”,但线程没有停止。如果在调用循环之前将mKillThread设置为true,它将永远不会运行。我尝试简单地bool mKillThread并使用属性和self.mKillThread。。。下面是代码中对mKillThread的唯一引用 初始化: 线程内容: // Called on main thread - (void)killThread { NSLog(@"killThread"); mKillThread = true; }

我在日志中看到“killThread”,但线程没有停止。如果在调用循环之前将mKillThread设置为true,它将永远不会运行。我尝试简单地bool mKillThread并使用属性和self.mKillThread。。。下面是代码中对mKillThread的唯一引用

初始化:

线程内容:

// Called on main thread
- (void)killThread {   
    NSLog(@"killThread");
    mKillThread = true;
}

- (void)threadLoop {
    while ( !mKillThread ) {
        if ( mKillThread ) {

            NSLog(@"killthread haha!");
            return;
        }
        NSLog(@"looping!");
    }
}
编辑-


我发现,在xib中有2个视图被设置为MyViewSubclass,所以我创建了2个线程。我只是在连接的自定义视图上调用killThread,而不是另一个。天哪

尝试将变量mKillThread设置为volatile。这将告诉编译器,这个变量将在多个线程中使用,它不应该进行可能导致问题的优化

volatile bool mKillThread;

大概编译器优化了
if
子句,因为它可以推断
while
循环
mKillThread
中的
必须是
false
,因此
if
子句是不必要的

注意,(目标-)C(++)编译器可以进行这种优化

要告诉编译器可以从另一个线程等访问变量,请使用
volatile

或者通过getter访问它也就足够了,
[self-mKillThread]

更正了语法突出显示。
volatile bool mKillThread;