如果我有一个协议:
protocol SomeProtocol {
func doSomething()
}
Run Code Online (Sandbox Code Playgroud)
在辅助类中,我引用了协议变量:
class someClass {
var delegate: SomeProtocol?
}
Run Code Online (Sandbox Code Playgroud)
因为SomeProtocol没有标记为: class,所以假设可以delegate是任何东西,并且在值类型(结构和枚举)的情况下不需要,weak var因为值类型无法创建强引用。weak var事实上,编译器除了类类型之外不允许任何类型。
但是,没有什么可以阻止您将类设置为委托,并且如果协议未标记为: class(因为SomeProtocol is),无法使用弱 var` 并且会创建保留周期。
class MyClass: NSObject, SomeProtocol {
func doSomething() { }
}
struct MyStruct: SomeProtocol {
func doSomething() { }
}
let someClass = SomeClass()
let myStruct = MyStruct()
someClass.delegate = myStruct
// After myStruct gets assigned to the delegate, do the delegate and the struct refer to the same instance or does the struct get copied?D
let myClass = MyClass()
someClass.delegate = myClass // can't use weak var so myClass is retained
Run Code Online (Sandbox Code Playgroud)
鉴于上面的示例,在使用委托和数据源的情况下,不应该: class总是使用吗?基本上任何用于维护引用的协议都应该始终仅限于类对象,对吗?
| 归档时间: |
|
| 查看次数: |
1632 次 |
| 最近记录: |