lixiang1994 / AttributedString

基于Swift插值方式优雅的构建富文本, 支持点击长按事件, 支持不同类型过滤, 支持自定义视图等.
MIT License
859 stars 78 forks source link

控制器的某个Label属性使用了.action 造成该控制器没有调用deinit #44

Closed HZRZCW closed 5 months ago

HZRZCW commented 2 years ago

如题!!!!!!

lixiang1994 commented 2 years ago

代码截图, 闭包内是否加了[weak self] ?

HZRZCW commented 2 years ago

代码截图, 闭包内是否加了[weak self] ?

闭包内没有任何代码也一样会。

lixiang1994 commented 2 years ago

??? 我测试了Demo中的页面 都是可以正常deinit的, 可以提供尽可能全的代码截图吗? 方便分析

HZRZCW commented 2 years ago

??? 我测试了Demo中的页面 都是可以正常deinit的, 可以提供尽可能全的代码截图吗? 方便分析

我再测试一下

lixiang1994 commented 2 years ago

注意 action回调闭包即使你传入的是一个function, 只要使用了外部变量就会产生引用

lixiang1994 commented 2 years ago

Demo中ActionViewController 里 使用的就是function形式, 如果在方法内要访问self, 如下:

        weak var `self` = self
        func clicked(_ result: ASAttributedString.Action.Result) {
            self?.label.backgroundColor = .brown
        }
HZRZCW commented 2 years ago

Demo中ActionViewController 里 使用的就是function形式, 如果在方法内要访问self, 如下:

        weak var `self` = self
        func clicked(_ result: ASAttributedString.Action.Result) {
            self?.label.backgroundColor = .brown
        }
image
lixiang1994 commented 2 years ago

验证了一下, 确实如此, Swift语法的定义, 可以曲线救国的方法只有在方法内嵌套一个子方法调用外部方法了.

        weak var `self` = self
        func clicked(_ result: ASAttributedString.Action.Result) {
            self?.clicked(result)
        }
HZRZCW commented 2 years ago

验证了一下, 确实如此, Swift语法的定义, 可以曲线救国的方法只有在方法内嵌套一个子方法调用外部方法了.

        weak var `self` = self
        func clicked(_ result: ASAttributedString.Action.Result) {
            self?.clicked(result)
        }

能用就行,不过可以提醒下其他人

ZClee128 commented 6 months ago

重新打开吧,有别的问题 image zhe zhon这种写法也是会导致不走deinit

ETmanwenhan commented 6 months ago

这是来自QQ邮箱的假期自动回复邮件。   您好,谢谢你联系我。我会尽快给您回复。

ZClee128 commented 6 months ago

作者快点解决一下吧

lixiang1994 commented 5 months ago

重新打开吧,有别的问题 image zhe zhon这种写法也是会导致不走deinit

是的, 上面有人提到了

ZClee128 commented 5 months ago

重新打开吧,还有其他问题图像zhon这种写法也会导致走不了deinit

是的,上面有人提到过

我看到很长时间没有解决,希望大佬可以抓紧时间修复一下

lixiang1994 commented 5 months ago

重新打开吧,还有其他问题图像zhon这种写法也会导致走不了deinit

是的,上面有人提到过

我看到很长时间没有解决,希望大佬可以抓紧时间修复一下

这受限于Swift特性, 我无法解决, 只能建议绕开这种用法

ZClee128 commented 5 months ago

重新打开吧,还有其他问题图像zhon这种写法也会导致走不了deinit

是的,上面有人提到过

我看到很长时间没有解决,希望大佬可以抓紧时间修复一下

这受限于Swift特性, 我无法解决, 只能建议绕开这种用法

好吧😂

dagundejuzi commented 4 months ago

weak var self = self

还有一种写法,把子控件的引用设为weak。

 weak var hasAttrV: UIView?
……
let v = getAttrView
superView.addSubview(v)
hasAttrV = v

一直没搞明白,这个子View到底是怎么持有到控制器的,action指向控制器的函数或者闭包,就能持有了?用 [weak self] 都不行?

ETmanwenhan commented 4 months ago

这是来自QQ邮箱的假期自动回复邮件。   您好,谢谢你联系我。我会尽快给您回复。