iphone - 我的 iPhone 应用程序真的需要锁定吗?

标签 iphone objective-c cocoa locking thread-safety

我正在开发一个相对简单的 iPhone 应用程序,该应用程序有一个多轮计时器,带有许多设置,例如轮数和轮长。我们允许在计时器运行时更​​新某些设置,这意味着计时器可能正在从设置正在写入的同一内存中读取。没有代码的关键部分,多个线程将同时执行,但设置中的代码可能会尝试写入计时器正在读取的内存。

就一个简单的例子而言,假设我们有一个全局变量 foo 并且有一个 NSTimer 方法,如下所示:

-(void)timerTick { NSString *x = foo;

然后在设置代码中,我们在计时器运行时执行此操作:

foo = @"测试";

在此应用程序中使 foo 成为原子就足够了吗?还是我们需要某种锁定方案?

谢谢。

最佳答案

通常在以通常方式使用NSTimer 时,您不必锁定。

更详细地说,当您使用 NSTimerscheduledTimerWithTimeInterval:target:selector:userInfo:repeats: 创建计时器时,生成的计时器会添加到运行循环中您在其中创建计时器的线程。因此,如果您以这种方式在主线程上创建 NSTimer 实例,定时器的触发将作为主事件循环的一部分处理,因此您注册的回调将在主线程上调用,不在另一个线程上。因此,如果您不自己创建任何线程,则完全不用担心锁定等问题。

有关详细信息,请阅读 this .

关于iphone - 我的 iPhone 应用程序真的需要锁定吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2137704/

相关文章:

iphone - 将 UINavigationBar 添加到没有 UINavigationController 的 UITableViewController

ios - 隐式转换 'BOOL' (又名 'signed char' ) 到 'id' ,objc_setAssociatedObject

iOS:限制数据类型 "double"的精度而不转换为 NSString

swift - 如何安全地测试一个方法是否可以通过 NSInitation 调用

iphone - 如何在Objective-C中实现多级委托(delegate)

iphone - 自定义 uitablviewcell 不在 Controller 中调用 didSelectRowAtIndexPath

正则表达式太贪婪;几乎吃掉了我所有的行

swift - 如何处理 Process.run 抛出的异常

javascript - android 手机上的淡入 div

objective-c - Xcode 帮助? - "' didRotateFromInterfaceOrientation' 未声明 "+ "在 ';' token 之前应为 ':'“