ARC 中分唾,對(duì)于一般的 delegate欲虚,在聲明中將其指定為 weak揭璃,在這個(gè) delegate 實(shí)際的對(duì)象被釋放的時(shí)候晚凿,會(huì)被重置回nil, 在Swift中和OC有些不同,如下所示
圖片:
文本:
importUIKit
protocol MyDelegate:NSObjectProtocol{
funcmyMethod()
}
class My {
weak var delegate:MyDelegate?
}
class Demo:UIViewController,MyDelegate{
funcmyMethod() {
print("myMethod")
}
override func viewDidLoad() {
letmy =My()
my.delegate=self
}
}
/**
* 如果不加NSobjectProtocol瘦馍,那么則會(huì)報(bào)錯(cuò)歼秽,報(bào)錯(cuò)內(nèi)容error: 'weak' may only be applied to class and class-bound protocol types, not 'MyDelegate' weak var delegate: MyDelegate?
* 原因:Swift的protocol是可以被除了class以外的其他類型遵守的,而對(duì)于像struct或是enum這樣的類型不通過(guò)引用計(jì)數(shù)來(lái)管理內(nèi)存情组,所以不能用weak這樣的ARC的概念來(lái)進(jìn)行修飾燥筷。
* 解決辦法:Swift中使用weak delegate,需要將protocol限制在class中
* 在protocol后面加入以下兩種
1.NSObjectProtocol讓協(xié)議遵循NSObjectProtocol這個(gè)協(xié)議
2.class限制協(xié)議只用在class中
*/