首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SKNode线程安全吗?

SKNode线程安全吗?
EN

Stack Overflow用户
提问于 2016-05-25 01:45:20
回答 1查看 198关注 0票数 2

在我和Swift一起制作的一个iOS游戏中,我正在监听触摸事件,读取一些SKNodeuserData属性,并更新场景中其他SKSpriteNode的texture属性,但为了避免用户交互过程中的任何延迟,我在主队列上异步分发此更新代码,这是一个好主意吗?

顺便提一下,关于线程安全的一些一般性问题:是只在写入数据时存在风险,还是在读取数据时也存在风险?

谢谢。

EN

回答 1

Stack Overflow用户

发布于 2017-12-25 08:28:04

正如当前documentation on SKNodegetting started部分中所说的:

确保对主线程的节点访问

因此,标题中的问题的答案

是SKNode线程安全的吗?

is - NOSKNode不是线程安全的,应该只从主线程修改它。

但第二个问题的答案是:

我在主队列上异步分派这个更新代码,这是个好主意吗?

will be YES.这正是您所期望的。

至于最后一个问题:读取数据时可能存在风险。如果您读取像let version = 3这样的常量,就不会有任何风险。但是看看这个例子:

代码语言:javascript
复制
var bigLazyObject: BigObject?

func getBigLazyObject() -> BigObject {
    if let existingObject = bigLazyObject {
        return existingObject
    } else {
        let newObject = BigObject()
        bigLazyObject = newObject
        return newObject
    }
}

它演示了第二个BigObject实例的意外创建,如果将在两个线程中同时调用getBigLazyObject(),则可能会发生这种情况。在实际创建if之前,这两个线程都有可能落在bigLazyObject语句的else分支中。这类问题应该在创建线程安全的单例时解决。在Swift中,它们是线程安全购买默认值,但在Objective-C中,人们通常使用dispatch_once()块。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37420469

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档