[iOS][Note] linphone的destroy方法

以下是解析linphone的destroy方法,看看他做了什麼,效果會是什麼。
- (void)destroyLibLinphone {
// 1.
[mIterateTimer invalidate]; 
//just in case
// 2.
[self removeCTCallCenterCb];
// 3.
[[NSNotificationCenter defaultCenter] removeObserver:self];
//4.
if (theLinphoneCore != nil) { //just in case application terminate before linphone core initialization
    [LinphoneLogger logc:LinphoneLoggerLog format:"Destroy linphonecore"];
    linphone_core_destroy(theLinphoneCore);
    theLinphoneCore = nil;
    ms_exit(); // Uninitialize mediastreamer2

    // Post event
    NSDictionary *dict = [NSDictionary dictionaryWithObject:[NSValue valueWithPointer:theLinphoneCore] forKey:@"core"];
    [[NSNotificationCenter defaultCenter] postNotificationName:kLinphoneCoreUpdate object:[LinphoneManager instance] userInfo:dict];

    SCNetworkReachabilityUnscheduleFromRunLoop(proxyReachability, CFRunLoopGetCurrent(), kCFRunLoopDefaultMode);
    if (proxyReachability)
        CFRelease(proxyReachability);
    proxyReachability=nil;

}
//5.
libStarted  = FALSE;
}
  1. 他將mIterateTimer這個NSTimer給停止,並從NSRunLoop內移除,這個timer會定時執行固定的背景工作,像是接收sip訊息、執行對proxy的註冊之類的。所以這主要是停止固定的背景任務。
  2. 他將CTCallCenter這個變數給釋放。這主要是處理電話的部分,可以取得目前的來電狀況,以及來電狀態的變化,像是來電的狀況從撥出到接通。
  3. 再來就只是將自己本身從通知中心移除。
  4. 這邊主要是把LinphoneCore給釋放。首先是呼叫linphonecoredestroy來清除theLinphoneCore,然後將theLinphoneCore釋放。再來post一個消息出來說Libphone core更新狀態了。最後是將對於某個網域(address或是name)的可連線能力的參考從目前的Run loop中移除,並且釋放它
  5. 最後把libStarted給設定成False。
所以以上最主要他做了幾件事情:停止背景任務、停止處理來電以及中止連線偵測。

留言