如果我有协议:
protocol SomeProtocol {
func doSomething()
}
在助手类中,我引用了一个协议变量:
class someClass {
var delegate: SomeProtocol?
}
因为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
给出上面的示例,在使用委托和数据源的情况下,是否应: class
始终使用?基本上,用于维护引用的任何协议都应始终限于类对象,对吗?
正确的。如果您试图通过弱引用打破保留周期,则必须使用类,因为weak
修饰符仅适用于引用类型(类)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句