日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

viewDidUnload 和 dealloc 的区别

發(fā)布時間:2025/7/14 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 viewDidUnload 和 dealloc 的区别 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

對于iphone開發(fā)人員來說,內(nèi)存管理是極為重要的技巧,哪怕程序的功能再強大,設計再漂亮,如果內(nèi)存控制不好,也難逃程序莫名退出的噩運,這與網(wǎng)頁開發(fā)是完全不同的。

內(nèi)存控制里面有很多門道,在這里分析一下 viewDidUnload 和 dealloc 的區(qū)別,關(guān)于這兩者的區(qū)別的文章很多,但是大都是摘抄和翻譯官方文檔,有的也只是簡單的說兩句,并沒有詳細說出兩者具體的區(qū)別。

在了解兩者之間的區(qū)別,首先要知道?view?的生命周期,google 里面有很多文章,可以先去搜一下,這里就不詳解了。

顧名思義 ?viewDidUnload?就是當 view 被卸載以后執(zhí)行的語句,它與 viewDidLoad 是相互呼應的。大家都知道官方的解釋是執(zhí)行類似

?

self.myOutlet = nil;

?

的命令,但是為什么這么干,什么時候調(diào)用這個方法呢?

這個方法是不能手動調(diào)用的,它實際上是當應用程序接收到手機內(nèi)存警告的時候自動調(diào)用的方法,目的就是清空內(nèi)存除當前?viewController?以外所有已經(jīng)加載過的?viewController 里面的暫時不再使用的一些控件或數(shù)據(jù),以避免應用程序應消耗內(nèi)存過多被強制關(guān)閉。記住,是除當前正在展示的 view?所屬?viewController 以外所有已經(jīng)在內(nèi)存里面的 viewController 執(zhí)行?viewDidUnload 方法,而不是當前 viewController?執(zhí)行 viewDidUnload,當然,這些 viewController 不會被 dealloc。所以在 viewDidUnload 里面一般都是釋放 IBOutlet 變量和在 viewDidLoad、viewWillAppear、viewDidAppear 等方法能夠重建的數(shù)據(jù)。而由其他頁面?zhèn)鬟f過來的數(shù)據(jù)或者無法經(jīng)過 viewDidLoad、viewWillAppear、viewDidAppear 等方法重建的數(shù)據(jù)則不能釋放,舉例子說如果在 navigationController 由上一個頁面?zhèn)鬟f過來的一張圖片,在 viewDidUnload 里被釋放的話,則當 view 再次加載的時候就無法恢復了。

那為什么要寫成 self.myOutlet = nil; ,實際上這個語法是執(zhí)行了 property 里的setter 方法,而不是一個簡單的變量賦值,它干了兩件事:1、老數(shù)據(jù) release?掉,2、新數(shù)據(jù)(nil)retain(當 property 設置為 retain 的情況下),當然對 nil retain 是無意義的。如果寫成 myOutlet = nil,那就是簡單的把 myOutlet 指向 nil,這樣內(nèi)存就泄漏了,因為老數(shù)據(jù)沒有 release。而如果僅僅寫成?[myOutlet release] 也會有問題,因為當 view?被 dealloc 的時候會 再次 release,程序就出錯了,而對 nil release 是沒有問題的。
?
dealloc?是當前 viewController 被釋放的時候,清空所有當前 viewController 里面的實體和數(shù)據(jù)來釋放內(nèi)存,該方法也是自動調(diào)用的,無需手動執(zhí)行。舉例說明當 modalView 被 dismissModalViewControllerAnimated 或者 navigationController 回到上一頁的時候,這個方法就會被自動調(diào)用。因為這個頁面已經(jīng)不再使用了,所以可以把所有實體和數(shù)據(jù)都釋放(release)掉。

其實兩者最大的區(qū)別就是: viewDidUnload 是內(nèi)存除當前以外所有 viewController 同時執(zhí)行,而 dealloc 只是當前 viewController 執(zhí)行。這個是網(wǎng)上的材料沒有說明的。

正如網(wǎng)上說viewDidUnload可以釋放一些容易重新構(gòu)建的東西,比如本地的圖片之類的,當然在viewDidLoad里必須重新構(gòu)建。

而對于不易重新構(gòu)建的東西,如重新從服務器下載的數(shù)據(jù),則可以放在init里構(gòu)建,viewDidUnload就不要將其釋放了。



PS: 很多朋友都說無法調(diào)試 viewDidUnload,其實是可以的。方法是在 iOS 模擬器的菜單里選 硬件 -> 模擬內(nèi)存警告,這個時候就可以看到 viewDidUnload 里面 NSLog 的東西了,可以試試在打開過的 viewController 里都 NSLog 一下看看效果。而 dealloc 里面可以直接 NSLog。

?

轉(zhuǎn)自:http://www.cnblogs.com/zhwl/archive/2012/06/06/2538494.html

轉(zhuǎn)載于:https://www.cnblogs.com/superchao8/archive/2012/09/18/2690586.html

總結(jié)

以上是生活随笔為你收集整理的viewDidUnload 和 dealloc 的区别的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 成人公开视频 | 宝贝乖h调教灌尿穿环 | 欧美视频xxx | 久久免费激情视频 | 亚洲蜜桃av | 在线免费观看日韩av | 古典武侠av | 天天干,夜夜操 | 亚洲一级在线 | 少妇高潮惨叫久久久久 | 成人黄色一区二区三区 | 日日干夜夜拍 | 国产草草影院 | 亚洲久久久久久 | 日韩精品一区在线视频 | 黄色网战在线观看 | 无码国产精品一区二区色情男同 | 中文字幕一区二区三区日韩精品 | 欧美成人高清视频 | 精品久久中文字幕 | 欧美亚洲第一页 | 久久视频国产 | 一本之道高清无码视频 | 国产片91 | 玩弄少妇人妻 | 少妇在线视频 | 中文字幕在线观看日本 | 在线黄色av | 88av在线播放 | 三级黄网 | 观看av在线| 欧美性插视频 | 在线亚洲区 | 青青草原av在线 | 天天综合亚洲 | 青青草午夜 | 亚洲黄色片在线观看 | 肉丝美足丝袜一区二区三区四 | 国产永久毛片 | 午夜激情影院 | 亚州精品国产精品乱码不99按摩 | 国产免费aa | 国产午夜在线一区二区三区 | 色播网址 | 秋霞一区二区三区 | 精品一区二区成人免费视频 | 毛片网站在线 | 久久久久久婷婷 | 男女猛烈无遮挡 | 中文字幕乱妇无码av在线 | 国内黄色片 | 精品色 | 久久精品一区二区三区不卡牛牛 | 亚洲女人的天堂 | 精品国产一区二区三 | 黄色av免费| 亚洲国产成人精品激情在线 | 黄页视频在线观看 | 久久久影视 | 法国空姐在线观看完整版 | 国内精品卡一卡二卡三 | 呦呦av | 美女伊人网 | 91看片国产 | 少妇高潮灌满白浆毛片免费看 | 好吊视频一区二区三区 | 在线观看视频二区 | 青青草国产精品 | 成人激情四射网 | 一级肉体全黄裸片 | 国产精品伦一区二区三区免费看 | 国产一区二区在线播放视频 | 精品国产乱码久久久久久鸭王1 | 免费成人av在线播放 | 奶妈的诱惑 | 九九精品在线播放 | 男人与雌宠物交h | 国产偷国产偷av亚洲清高 | 欧美一级片在线看 | 日韩精品久久一区 | 二区三区免费 | 99国产精品99久久久久久粉嫩 | 美国性生活大片 | 一区二区在线免费视频 | 美女被草出水 | 午夜精品导航 | 已满18岁免费观看电视连续剧 | 久久av中文字幕 | 欧美综合在线观看 | 成人精品一区二区三区电影 | 国产精品美女久久久久av爽 | 午夜激情久久 | 九九视频这里只有精品 | 中文无码一区二区三区在线观看 | 在线视频三区 | 一区一区三区产品乱码 | 农村激情伦hxvideos | 一级片手机在线观看 | jizzjizz日本免费视频 |