public class somethingViewController{
func viewDidLoad(){
let contentImageView = UIImageView()
let contentImageViewTapRecognizer = UITapGestureRecognizer(target: self, action: #selector(somethingViewController.tapped(_:)))
contentImageView.addGestureRecognizer(contentImageViewTapRecognizer)
let stackView = OAStackView(arrangedSubviews: [contentImageView])
self.view.addSubview(stackView)
}
func tapped(sender: UITapGestureRecognizer){
//tapped
}
}
Run Code Online (Sandbox Code Playgroud)
我不认为这是一个强引用循环,但我可能是错的。我认为它可能是一个强引用循环的原因是因为stackView指向通过点击识别器中的选择器contentImageView返回的指向。somethingViewController
如果是强引用循环,该如何解决呢?
没有强循环,就没有问题。在目标动作模式中,控件不会保留目标:
\n\n\n\n\n控制对象不会(也不应该)保留其目标。但是,发送操作消息的控件的客户端(通常是应用程序)负责确保其目标可用于接收操作消息。为此,他们可能必须将目标保留在内存管理环境中。此预防措施同样适用于代表和数据源。
\n
这意味着手势识别器到视图控制器没有强引用。
\n\n整个循环:
\n\nself \n \xe2\x86\xb3 self.view (strong)\n \xe2\x86\xb3 stackView (strong, via subviews)\n \xe2\x86\xb3 contentImageView (strong, via subviews)\n \xe2\x86\xb3 contentImageViewTapRecognizer (strong, via gestureRecognizers)\n \xe2\x86\xb3 self (**weak**, via target)\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
495 次 |
| 最近记录: |