Swift 样品中的强参考

Swift 样品中的强参考,swift,automatic-ref-counting,vapor,Swift,Automatic Ref Counting,Vapor,在使用Vapor Hello sample()时,我遇到了以下问题: public func routes(_ router: Router) throws { ... let todoController = TodoController() router.get("todos", use: todoController.index) router.post("todos", use: todoController.create) router.dele

在使用Vapor Hello sample()时,我遇到了以下问题:

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


只要
路由器
注册了这些
get
/
post
/
delete
处理程序,
todoController
就会一直存在。

但是
index
只是一个“返回Todo.query(on:req.all()”,它是否间接捕获
self
?@faviomob所有实例方法捕获
self
。这就是为什么它们是实例方法。哦,我不知怎么把它们和闭包混在一起了,但它们是方法。现在很清楚了。@faviomob-Well实例方法是闭包。Swift中的所有函数都是闭包,因为它们可以捕获并保持任何外部引用。“函数中引入的全局函数和嵌套函数实际上是闭包的特殊情况。”-这是我在swift文档中所能找到的全部内容。你能不能提供一个链接,苹果明确地说实例方法也是闭包?