swift 中的對象 deinit 釋放后 BAD_ACCESS 崩潰 野指針 僵尸對象

其實在 swift 中也是有 野指針訪問僵尸對象造成崩潰的時候的

開發(fā)過程中,我 override 了一個 UIView 對象的removeFromSuperview()
本意是想在這個對象移除的時候 添加一個移除動畫 再移除.所以就刻意沒有寫 [weak self] 弱引用這個對象. 因為想完成動畫以后再移除.

BAD_ACCESS 程序閃退

可是

之前都是直接放在 keyWindow 上 , 今天的需求是放在一個控制器的 View 上面.
當這個重寫了 removeFromSuperview() 在沒有手動調(diào)用 view.removeFromSuperview() 方法 , 控制器先 deinit 之后. Swift 也同樣的將這個對象的內(nèi)存給釋放了.

所以

當這個view對象被系統(tǒng) deinit 之前 , 他的 superView 對他執(zhí)行了 subview.removeFromSuperview() 方法. 然后 deinit 執(zhí)行 , 對象被回收.

于是

當異步執(zhí)行的 UIView.animate 方法執(zhí)行到 Complete 閉包時,對這個對象發(fā)送任何消息,都是在訪問一個僵尸對象.最后造成的就是 BAD_ACCESS 程序閃退

具體的代碼:

Swift 野指針

尋找 BUG 思路

99% 的 程序崩潰都來源于數(shù)組越界. 在 swift 中 其實有很多來源于強制解包. 但是我寫 swift 時 幾乎不用!來強制解包. 所以在執(zhí)行 deinit 前后有哪些函數(shù)調(diào)用 就是最可疑的.

  1. 第一步 : 尋找導致崩潰的函數(shù)大致范圍. 將代碼暫存,并恢復(fù)到上一次提交,發(fā)現(xiàn)這個 BUG 依然存在. 那么一定不是最近寫的幾行代碼導致的
  2. 打斷點,看內(nèi)存堆棧 : 看看關(guān)鍵幾個函數(shù)的調(diào)用順序
  3. 找到目標函數(shù),嘗試修改

由于這段代碼是我自己寫的,在進行第一步之后,我的懷疑目標就落在了這個函數(shù)上面.
可是之前都執(zhí)行的很好,唯一的不同就是 這次添加在一個 控制器的 View 上面.
那么在控制器釋放的時機出現(xiàn)的問題,應(yīng)該就是在這段代碼了.

  • 嘗試修改之后,順便發(fā)現(xiàn) [weak super] 這樣的寫法果然是不允許的. 于是封裝了一個函數(shù),使用 self?. 去訪問
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子浑此,更是在濱河造成了極大的恐慌鄙信,老刑警劉巖香嗓,帶你破解...
    沈念sama閱讀 221,820評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件纱扭,死亡現(xiàn)場離奇詭異峡迷,居然都是意外死亡颇象,警方通過查閱死者的電腦和手機伍伤,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,648評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來夯到,“玉大人嚷缭,你說我怎么就攤上這事∷<郑” “怎么了阅爽?”我有些...
    開封第一講書人閱讀 168,324評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長荐开。 經(jīng)常有香客問我付翁,道長,這世上最難降的妖魔是什么晃听? 我笑而不...
    開封第一講書人閱讀 59,714評論 1 297
  • 正文 為了忘掉前任百侧,我火速辦了婚禮,結(jié)果婚禮上能扒,老公的妹妹穿的比我還像新娘佣渴。我一直安慰自己,他們只是感情好初斑,可當我...
    茶點故事閱讀 68,724評論 6 397
  • 文/花漫 我一把揭開白布辛润。 她就那樣靜靜地躺著,像睡著了一般见秤。 火紅的嫁衣襯著肌膚如雪砂竖。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,328評論 1 310
  • 那天鹃答,我揣著相機與錄音乎澄,去河邊找鬼。 笑死测摔,一個胖子當著我的面吹牛置济,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 40,897評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼舟肉,長吁一口氣:“原來是場噩夢啊……” “哼修噪!你這毒婦竟也來了查库?” 一聲冷哼從身側(cè)響起路媚,我...
    開封第一講書人閱讀 39,804評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎樊销,沒想到半個月后整慎,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,345評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡围苫,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,431評論 3 340
  • 正文 我和宋清朗相戀三年裤园,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片剂府。...
    茶點故事閱讀 40,561評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡拧揽,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出腺占,到底是詐尸還是另有隱情淤袜,我是刑警寧澤,帶...
    沈念sama閱讀 36,238評論 5 350
  • 正文 年R本政府宣布衰伯,位于F島的核電站铡羡,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏意鲸。R本人自食惡果不足惜烦周,卻給世界環(huán)境...
    茶點故事閱讀 41,928評論 3 334
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望怎顾。 院中可真熱鬧读慎,春花似錦、人聲如沸槐雾。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,417評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽蚜退。三九已至闰靴,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間钻注,已是汗流浹背蚂且。 一陣腳步聲響...
    開封第一講書人閱讀 33,528評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留幅恋,地道東北人杏死。 一個月前我還...
    沈念sama閱讀 48,983評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親淑翼。 傳聞我的和親對象是個殘疾皇子腐巢,可洞房花燭夜當晚...
    茶點故事閱讀 45,573評論 2 359

推薦閱讀更多精彩內(nèi)容

  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫、插件玄括、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,120評論 4 61
  • 現(xiàn)在我所能做的我也多想到你在的地方去 可那是一個我所不能到達的地方 現(xiàn)在我所能做的 僅僅只是連你的那份一起 三年后...
    誰說天堂無悲傷閱讀 119評論 0 1
  • 看完后冯丙,更多的是讓我陷入了深深的思考,我是一個怎么樣的人遭京?在面臨死亡的時候胃惜,我有那種犧牲自己保護親人和別人的大無畏...
    野鳥閱讀 2,637評論 0 2
  • 文/孤鳥差魚 請原諒 那些捏造不切實際的人 那是文學人的通病
    孤鳥差魚閱讀 427評論 4 5
  • 每一部電影船殉,都會飽受爭議,有人贊美就會有人詆毀斯嚎。很多時候電影的評分并不能代表作品的好壞利虫,那只是一部分人對電影的評判...
    喜聞耳間閱讀 228評論 0 0