我有一个Game
类,它有一个-(void) play
方法,当用户单击设备上的“播放”按钮时将执行该方法。
在该-(void) play
方法中,我有一个 while 循环,该循环将重复执行,直到用户单击 Quit 按钮。这个while循环基本上是我代码的核心,所有必要的方法都被调用,事情发生,对象交互等。
我还有一个 User 类(在其他类中..),我在我的 Game 类User* player
的方法中创建了一个实例-(void) play
来存储一些值并让这些值在游戏期间与其他事物交互..
现在我需要知道(在游戏中的任何时候......)设备与磁北的偏差以及用户在设备上锻炼的加速度
我已经编写了代码,一切正常。但是,作为编程新手,我对代码的整体设计有一些疑问,我认为这是一团糟,尤其是在使用 CoreLocation 和 CoreMotion 框架时。
Game 类的-(void) play
方法(基本上是我的“主要”方法)在单独的线程上执行,如[game performSelectorInBackground:@selector(play) withObject:nil];
这是正确的方法吗?
但是,我从-(void) play
方法内部初始化 CoreMotion Acceleration 更新,[motionManager startDeviceMotionUpdatesToQueue:[NSOperationQueue mainQueue]withHandler:^(CMDeviceMotion *motion, NSError *error){...}
这意味着更新将存储在主队列中,而初始化这些更新的方法是从在-(void) play
单独线程上运行的 method() 内部执行的。那有意义吗?
当我初始化我的 Game 类的实例时,我也会初始化 CoreLocation 更新。更诡异?
我的观点是这样的。鉴于我将测量用户在设备上锻炼的加速度以及他/她给设备的方向(度数),我想将所有这些都封装在我的 User 类中并具有类似[player getMyDegrees];
的[player getMyAcceleration];
方法正确的设计方式?我应该在哪里初始化这些更新?从内部哪个特定的类方法?一切都应该运行在同一个主线程还是同一个单独的线程或不同的单独线程上?我很困惑..