我想创建一个实时游戏。游戏将有一个模型,将定期更新......
- (void) timerTicks {
[model iterate];
}
与所有游戏一样,我将恢复用户输入事件和触摸。作为回应,我需要更新模型....
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
[model updateVariableInModel];
}
所以有两个主题:
两个线程都将在模型中共享变量。
在线程之间共享对象并避免多线程问题的最佳做法是什么?
答案 0 :(得分:1)
使用@synchronized关键字锁定需要在线程中共享的对象。
锁定所有对象的简单方法如下:
-(void) iterate
{
@synchronized(self)
{
// this is now thread safe
}
}
-(void) updateVariableInModel
{
@synchronized(self)
{
// use the variable as pleased, don't worry about concurrent modification
}
}
有关objective-c中线程的更多信息,请转到here
另请注意,您必须同时锁定同一个对象,否则锁本身就没用了。