Boc*_*ica 9 delegates ios retain-cycle swift
我有一个UIViewController,其中一个UIToolbar.它们从故事板中实例化.
我为我做了一个自定义课程UIToolbar.根据一些逻辑我做或不显示按钮.
在UIViewController当某些按钮被窃听需要采取行动.为此我在中创建了一个委托协议UIToolbar.
目前,当我关闭视图时,它会保留在内存中.进一步调查显示我的代表创建了一个保留周期.
在Objective-C中,我们只需将委托定义为weak.但是,我使用的是Swift,它不允许我将delegate变量定义为weak:
weak var navigationDelegate: MainToolBarDelegate?
// 'weak' cannot be applied to non-class type 'MainToolBarDelegate'
Run Code Online (Sandbox Code Playgroud)
当我关闭视图控制器时,我设置self.toolBar.navigationDelegate = nil并清除内存.但感觉不对劲!
为什么我得到保留周期,为什么我不能简单地将委托定义为weak?
Aar*_*ger 17
weak引用仅适用于类,而不是结构或枚举,它们是值类型.但默认情况下,协议可以应用于任何类型.
将您定义MainToolBarDelegate为仅限类的协议:
protocol MainToolBarDelegate: class {
}
Run Code Online (Sandbox Code Playgroud)
然后,您将能够将您的代理声明为weak.
| 归档时间: |
|
| 查看次数: |
1981 次 |
| 最近记录: |