溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

在 ARC 環(huán)境下使用 dealloc

發(fā)布時(shí)間:2020-06-25 12:47:04 來源:網(wǎng)絡(luò) 閱讀:1160 作者:無名小卒 欄目:開發(fā)技術(shù)

本文轉(zhuǎn)載自無雙的日志.


眾所周知,iOS開發(fā)的時(shí)候,使用ARC的話,dealloc函數(shù)是不需要實(shí)現(xiàn)的,寫了反而會出錯(cuò)。

但有些特殊的情況,dealloc函數(shù)還是需要的。

比如,在畫面關(guān)閉的時(shí)候,需要把ViewController的某些資源釋放,

在viewDidDissppear不一定合適,viewDidUnload一般情況下只在memory warning的時(shí)候才被調(diào)用。

不用ARC的情況下,我們自然會想到dealloc函數(shù)。

其實(shí)ARC環(huán)境下,也沒有把dealloc函數(shù)禁掉,還是可以使用的。只不過不需要調(diào)用[supper dealloc]了。


舉個(gè)例子,畫面上有UIWebView,它的delegate是該畫面的ViewController,在WebView載入完成后,需要做某些事情,比如,把indicator停掉之類的。

如果在WebView載入完成之前關(guān)閉畫面的話,畫面關(guān)閉后,ViewController也釋放了。但由于WebView正在載入頁面,而不會馬上被釋放,等到頁面載入完畢后,回調(diào)delegate(ViewController)中的方法,由于此時(shí)ViewController已經(jīng)被釋放,所以會出錯(cuò)。(message sent to deallocated instance)

解決辦法是在dealloc中把WebView的delegate釋放。

-(void)dealloc {

    self.webView.delegate = nil;

}


向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI