@discardableResult
public static func addPhysicsBody(to node: SCNNode, type: SCNPhysicsBodyType) -> SCNPhysicsBody {
// Here I use SCNPhysicsShape(node:) API
let shape = SCNPhysicsShape(node: node)
let body = SCNPhysicsBody(type: type, shape: shape)
node.physicsBody = body
return body
}
< /code>
Кажется, есть цикл удержания. Даже если я удаляю узел из родителей, узел все еще находится в памяти. < /P>
Однако, если я изменю код на: < /p>
@discardableResult
public static func addPhysicsBody(to node: SCNNode, type: SCNPhysicsBodyType) -> SCNPhysicsBody {
// Here I change to SCNPhysicsShape(geometry:) API
let shape = SCNPhysicsShape(geometry: node.geometry!)
let body = SCNPhysicsBody(type: type, shape: shape)
node.physicsBody = body
return body
}
< /code>
Это решает цикл удержания - после удаления узла из родителя, узел больше не в памяти. < /p>
Я подозреваю, что цикл сохраняется by scnphysicsshape (node: node)
api (https://developer.apple.com/documentati ... shape/init(node:options ), где Узел сохраняет тело физики, которое сохраняет Форма, которая сохраняет узел .
Однако я чувствую себя ошеломленным, что Apple не осознает такой очевидный цикл удержания, что заставляет меня сомневаться в себе. Я использовал API неправильно?
У меня есть помощник UTIL, который добавляет физику в узле: < /p> [code] @discardableResult public static func addPhysicsBody(to node: SCNNode, type: SCNPhysicsBodyType) -> SCNPhysicsBody { // Here I use SCNPhysicsShape(node:) API let shape = SCNPhysicsShape(node: node) let body = SCNPhysicsBody(type: type, shape: shape) node.physicsBody = body return body } < /code> Кажется, есть цикл удержания. Даже если я удаляю узел из родителей, узел все еще находится в памяти. < /P> Однако, если я изменю код на: < /p> @discardableResult public static func addPhysicsBody(to node: SCNNode, type: SCNPhysicsBodyType) -> SCNPhysicsBody { // Here I change to SCNPhysicsShape(geometry:) API let shape = SCNPhysicsShape(geometry: node.geometry!) let body = SCNPhysicsBody(type: type, shape: shape) node.physicsBody = body return body } < /code> Это решает цикл удержания - после удаления узла из родителя, узел больше не в памяти. < /p> Я подозреваю, что цикл сохраняется by scnphysicsshape (node: node) [/code] api (https://developer.apple.com/documentation/scenekit/scnphysicsshape/init(node:options :)), где [b] Узел сохраняет тело физики, которое сохраняет Форма, которая сохраняет узел [/b]. Однако я чувствую себя ошеломленным, что Apple не осознает такой очевидный цикл удержания, что заставляет меня сомневаться в себе. Я использовал API неправильно?