Swift代理中的保留循环
Swift代理中的保留循环
这个问题已经在这里有了答案:
我有一个UIViewController
和其中的一个UIToolbar
,它们从storyboard实例化。
我为我的UIToolbar
创建了一个自定义类。根据一些逻辑,我是否在其上显示按钮。
UIViewController
需要在一些按钮被点击时采取行动。
为此,我在UIToolbar
中创建了一个代理协议。
目前,当我关闭视图时,它会在内存中保留。进一步的调查显示我的代理创建了一个保持循环。
在Objective-C中,我们只需将代理定义为weak
。然而,我正在使用Swift,它不允许我将delegate
变量定义为weak
:
weak var navigationDelegate: MainToolBarDelegate? // 'weak' cannot be applied to non-class type 'MainToolBarDelegate'
当我关闭视图控制器时,我将self.toolBar.navigationDelegate = nil
设置为null
并清除内存。但感觉不对!
为什么我得到保持循环,为什么我不能简单地将代理定义为weak
?
admin 更改状态以发布 2023年5月23日