iOS ARC中CTCallCenter沒用,無法監聽電話的解決方案
嘗試使用CTCallCenter進行電話監聽時,發現一直無法捕獲電話狀態改變的事件,研究了一番之后找到了解決方案,在這里分享給大家。
首先使用CTCallCenter監聽電話的代碼如下:
這是網上一段很通用的代碼,而本人這么調用卻無法獲取電話狀態改變的事件,一開始感覺到很奇怪,因為callCenter變量聲明了之后,沒有設置 delegate也沒有設置target,那么是如何監聽的呢?而且更奇怪的是大家都是用這段代碼成功接收到了電話狀態的改變。
于是我猜測,一旦發生電話狀態改變時,系統會自動監測應用程序中是否聲明了CTCallCenter的實例,如果聲明了,就調用其中的回調。那么這就很合理了,由于本人在工程中開啟了ARC,callCenter在聲明之后,一旦離開函數的作用域就被釋放掉了(具體原因可參見ARC的原理)。而在未開啟ARC之前,是不會被釋放掉的。
知道了原因,那么解決方案也很明顯了,將callCenter聲明為成員變量即可。嘗試之后,果不其然,問題解決了。
本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!