Vapor Hello 示例中的强引用
Strong reference in Vapor Hello sample
在玩 Vapor Hello 示例 (https://docs.vapor.codes/3.0/getting-started/hello-world/) 时,我遇到了这个:
public func routes(_ router: Router) throws {
...
let todoController = TodoController()
router.get("todos", use: todoController.index)
router.post("todos", use: todoController.create)
router.delete("todos", Todo.parameter, use: todoController.delete)
}
正如我们在这里看到的,todoController
是一个全局 routes
函数的局部变量。并且它应该在离开它的范围后立即被释放,因为对它的引用没有传递到任何地方。对成员的引用已通过,但根据我的理解水平,这不是 ARC 的工作方式。但是,todoController
在整个程序执行期间都处于活动状态。这里的技巧在哪里?
todoController.index
是一个捕获 self
的闭包,它持有对 todoController
.
的强引用
只要 router
注册了这些 get
/post
/delete
处理程序,todoController
就会持续存在。
在玩 Vapor Hello 示例 (https://docs.vapor.codes/3.0/getting-started/hello-world/) 时,我遇到了这个:
public func routes(_ router: Router) throws {
...
let todoController = TodoController()
router.get("todos", use: todoController.index)
router.post("todos", use: todoController.create)
router.delete("todos", Todo.parameter, use: todoController.delete)
}
正如我们在这里看到的,todoController
是一个全局 routes
函数的局部变量。并且它应该在离开它的范围后立即被释放,因为对它的引用没有传递到任何地方。对成员的引用已通过,但根据我的理解水平,这不是 ARC 的工作方式。但是,todoController
在整个程序执行期间都处于活动状态。这里的技巧在哪里?
todoController.index
是一个捕获 self
的闭包,它持有对 todoController
.
只要 router
注册了这些 get
/post
/delete
处理程序,todoController
就会持续存在。