在我的计划中,我目前在我的代码开头(在我的SKSpriteNode
类中)将weak
定义为GameScene
并声明如下:
weak var tapFade: SKSpriteNode? = SKSpriteNode(color: UIColor.red, size: CGSize(width: 10, height: 10))
但是,由于它是weak
且没有当前引用,因此在我需要使用之前,它会被删除并变为nil
。同样在我的程序中,我初始化weak SKLabelNode
,如下所示:
weak var tapToBegin: SKLabelNode? = SKLabelNode(text: "Tap to Begin")
并不像SKSpriteNode
那样立即删除。我实现这一目标的方法是在我使用它之前重新声明SKLabelNode
:
tapToBegin = SKLabelNode(text: "Tap to Begin")
当我想使用它时,SKLabelNode
不nil
。虽然,我尝试使用相同的方法重新声明SKSpriteNode
,但它仍然是nil
。
注意:这是初始化的地方,我需要在我的程序中首先使用这些nodes
:
class GameScene: SKScene, SKPhysicsContactDelegate {
//Initialisations are here
weak var tapFade: SKSpriteNode? = SKSpriteNode(color: UIColor.red, size: CGSize(width: 10, height: 10))
weak var tapToBegin: SKLabelNode? = SKLabelNode(text: "Tap to Begin")
override func didMove(to view: SKView) {
//I first use these nodes here
}
}
有没有办法防止SKSpriteNode
立即被解除初始化?另外,为什么SKSpriteNode
会被立即删除,SKLabelNode
不会被删除?
答案 0 :(得分:2)
使用weak关键字将导致 SpriteNode 被ARC拾取并将被删除。因此,当您尝试与SpriteNode进行交互时,您将获得异常,因为它不再在内存中。在weak
关键字前删除var
。
var tapFade:SKSpriteNode = SKSpriteNode(color: UIColor.red, size: CGSize(width: 10, height: 10))