KVO的坑-不移除監聽會導致奔潰
最近上手的專案是公司7年前的程式碼了。。。2011年啥概念。。。
時間緊任務重,要求在年前出新版。。。
有一些複雜的功能被迫移植老程式碼。。。檢視PDF檔案的程式碼都是利用上下文畫上的
沒咋注意 然後把相應檔案的 release 等等 dealloc方法都幹掉了。。然後鴿鴿就掉坑裡了,我這邊模擬器,真機測試都不奔潰。。。
然後移交測試總說開啟檔案就奔潰???
後來換了一個ipad ,居然這個ipad跑起來還真的檢視檔案的時候就奔潰了?神馬情況 當時高興的我終於有機會找bug了,我擦
一看下面終端輸出
2018-02-12 19:22:31.981 PACM_ipad[548:2040225] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException'
<NSKeyValueObservance 0x175028f0: Observer: 0x17b91000, Key path: currentPage, Options: <New: YES
)'
2018-02-12 19:19:26.345 PACM_ipad[541:2039055] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'An instance 0x18d1da00 of class ReaderContentView was deallocated while key value observers were still registered with it.
<NSKeyValueObservance 0x191648a0: Observer: 0x18d1da00, Key path: frame, Options: <New: YES, Old: NO, Prior: NO> Context: 0x0, Property: 0x191616d0>
)'
瞬間精神了,原來是KVO的問題,然後到我的檔案裡看了一下果然是有使用KVO 但是dealloc方法被我幹掉了,然後檢視老程式碼的dealloc 果然裡面寫著刪除監聽的程式碼。。。
各位看官肯定不會像我如此粗心
相關推薦
KVO的坑-不移除監聽會導致奔潰
最近上手的專案是公司7年前的程式碼了。。。2011年啥概念。。。時間緊任務重,要求在年前出新版。。。有一些複雜的功能被迫移植老程式碼。。。檢視PDF檔案的程式碼都是利用上下文畫上的沒咋注意 然後把相應檔案的 release 等等 dealloc方法都幹掉了。。然後鴿鴿就掉坑裡
UGUI使用Scroll View,item有監聽會導致劃不動的問題
出現這個問題可以Button來註冊監聽 protected void RegisterButtonEvent(Button btn, UnityAction btnEvent) { if (null == btn) {
蘋果最後通牒:iOS軟體不移除熱更新將導致6月12日下架
IT之家6月1日訊息 APP熱更新,是指軟體不通過蘋果APP Store軟體版本更新稽核,直接在應用自行下載的軟體資料更新,在今年三月,蘋果已經警告過部分開發者違反了《蘋果開發者計劃許可協議》的3.3.2章節以及《App Store審查指南》2.5.2章節的規定,
類似吸頂功能解決io不能實時監聽onscroll的觸發問題
內核 所有 ble 解決 classname 監聽 頁面 osi window 問題:近期項目需要一個類似西東功能,當頁面向上滾動160px後div固定在頂部 解決方法:首先,想到的是window.onscroll方法 .fixed{position:fixed;-we
移除偵聽的匿名函式事件
//在嚴格模式下會報錯,只能在非嚴格模式下使用,非嚴格模式下暫未找到解決方案 //有時候我們要拿到事件的物件e,只能匿名函式才能接收事件e,但是又想移除這個事件 document.addEventListener("click",function(e){ console.log(e)
很多人都不知道的監聽微信、支付寶等移動app及瀏覽器的返回、後退、上一頁按鈕的事件方法
在實際的應用中,我們常常需要實現在移動app和瀏覽器中點選返回、後退、上一頁等按鈕實現自己的關閉頁面、調整到指定頁面或執行一些其它操作的 需求,那在程式碼中怎樣監聽當點選微信、支付寶、百度糯米、百度錢包等app的返回按鈕或者瀏覽器的上一頁或後退按鈕的事件呢。 我相信很多朋
bootstrap模態框點選空白處模態框不消失、監聽模態框開啟還是關閉
1.在div上新增 aria-hidden="true" 屬性 aria-hidden="true" 用於保持模態視窗不可見,直到觸發器被觸發為止(比如點選在相關的按鈕上)。 data-show
KVO-基本使用方法-底層原理探究-自定義KVO-對容器類的監聽
書讀百變,其義自見! 將KVO形式以程式碼實現呈現,通俗易懂,更容易掌握 :GitHub 一、KVO-基本使用方法 //註冊 - (void)addObserver:(NSObject *)observer forKeyPath:(NSString *)keyPath option
iOS微信瀏覽器回退不重新整理(監聽瀏覽器回退事件)
iOS在微信瀏覽器回退是不重新載入頁面的,有些時候是需要重新載入的,所以需要監聽回退事件 $(function(){ pushHistory(); }); function pushHistory(){ window.addEventLis
startup啟動不起來關於監聽的問題
問題描述:要在sqlplus中啟動到startup狀態,但是提示我沒有監聽,本來以為啟動一下就可以,但是connecting to一直卡半天,stop都停止不了 1.發現監聽有問題,前去更改 SQL> startupORA-00119: invalid specification for system
因iis監聽地址導致頁面無法訪問
net bsp 內網 成功 res 生效 查看 安裝失敗 http 安裝iis遇到某些組件安裝失敗,將監聽地址改為了127.0.0.1,安裝成功後此原因導致外網訪問iis失敗 netsh http add iplisten ipaddress=10.*.*.* (i
android中不小心使用靜態變數會導致記憶體洩露
在android 專案開發過程中,不小心可能就會導致activity的記憶體洩露,即使使用者在使用APP的時候並沒有感受到記憶體洩露給APP帶來毀滅性的奔潰,但我們開發者可以通過除錯能夠很明顯的看到有些佔用的記憶體死也GC不掉。 OK ,隔壁家老伍來講解
iOS 控制器POP後dealloc方法不走,通知監聽無法移除的問題
最近專案突然被說會閃退,且無法重現,時有出現。接到問題後一步步排查,終於發現問題。 表現:某個頁面的通知觀察者方法被多次呼叫! 原因查詢: 1、通知的監聽這裡我寫在viewDidLoad裡面,多次被呼叫只能說明多次傳送了通知,或者多次添加了觀察者。 2、通知的傳送確定沒多次
Oracle數據庫運維:要對監聽日誌文件(listener.log)進行定期清理,如果不定期清理,會遇到下面一些麻煩
tab 額外 機器 寫入 bpa 性能 connect user ini 原文鏈接: http://www.lookdaima.com/WebForms/WebPages/Blanks/Pm/Docs/DocItemDetail.aspx?EmPreviewTypeV=2&
監聽設備移除
rem std iterator 狀態改變 xcod mod message eat mina // // main.c // DriverIterator // #include <CoreFoundation/CoreFoundation.h> #in
事件監聽與移除方法
addEventListener() 方法用於向指定元素新增事件控制代碼。 addEventListener() 方法新增的事件控制代碼不會覆蓋已存在的事件控制代碼。 你可以向一個元素新增多個事件控制代碼。 你可以向同個元素新增多個同類型的事件控制代碼,如:兩個 "click" 事件。
js 監聽事件的疊加和移除
html DOM元素有很多on開頭的監聽事件,如onload、onclick等,見DOM事件列表。但是同一種事件,後面註冊的會覆蓋前面的: window.onresize = function(){ alert(1); } window.onresize = function(){ alert
egret之移除帶引數的監聽事件
this.selectBtn.addEventListener(egret.TouchEvent.TOUCH_TAP, this.onClickNewIndo.bind(this,this.data), this);//新增監聽事件 public onClickNewIndo
用AVPlayer寫視訊播放器時,在被釋放之後 ,AVPlayer一直監聽的事件沒有被移除,造成程式崩潰
最近的專案是在寫視訊和音訊,在播放頁面做一些操作的時候有時候會出現崩潰,但是一直沒報錯,所以一直很困擾。 前幾天在播放頁面又加了一些邏輯處理,然後崩潰才報出了錯誤。 而報錯的提示是,AVPlayer這個類已經被釋放了,然而已經新增的訊息監聽還在,這就有可能會引起訊息的洩露。
Spring boot 專案HttpSessionListener用於監聽session失效時移除線上使用者的全域性引數
在專案中會出現使用者不點選登出時間觸發session.invalidate()方法,此時我們就無法確定使用者的實際登入狀態,再次我們使用HttpSessionListener監聽器來管理使用者session失效,進而解決了線上使用者的統計或者全域性引數的控制 值得注意的是: @Se