Emi*_*fil 22 memory-management objective-c ios xcode4 opentok
背景:
我的所有OpenTok方法都ViewController被推入视图中,就像典型的Master/detail VC关系一样.detailVC根据您的选择将您连接到不同的房间.当我按下后退按钮弹出视图时,我发生了崩溃(可能是7次中的1次):
[OTMessenger setRumorPingForeground] message sent to deallocated instance xxxxx
要么
[OTSession setSessionConnectionStatus:]: message sent to deallocated instance 0x1e1ee440
我在viewDidDisappear中放置了取消发布/断开连接方法:
-(void)viewDidDisappear:(BOOL)animated{
    //dispatch_async(self.opentokQueue, ^{
    [self.session removeObserver:self forKeyPath:@"connectionCount"];
    if(self.subscriber){
        [self.subscriber close];
        self.subscriber = nil;
    }
    if (self.publisher) {
        [self doUnpublish];
    }
    if (self.session) {
        [self.session disconnect];
        self.session = nil;
    }
    //});
    [self doCloseRoomId:self.room.roomId position:self.room.position];
}
这是一个痕迹:

这是Github上的DetailViewController:链接在这里
如何重现:
从MasterVC中进行选择,将您带入DetailVC,立即尝试连接到会话并发布
通常在会话有机会发布流之前,快速回到之前的MasterVC
试试几次,最终会崩溃.
如果我放慢速度并允许发布者有机会进行连接和发布,则不太可能导致崩溃.
预期结果:
它应该断开会话/取消发布并开始一个新的会话,因为我在Master/DetailVC之间来回走动.
其他:
您的设备和操作系统版本是什么?iOS 6
你在什么类型的连接?无线上网
僵尸已启用?是
ARC启用了吗?是
代表们定为零?是的,据我所知
任何帮助解决此崩溃将非常感激.也许我错过了一些我根本无法看到的基本知识.
似乎发生的事情是OpenTok库中的OTSession对象继续向该库中的对象发送消息,这些对象已经被切换视图解除分配.该库有一个[会话断开]方法,如果你给它足够的时间,它可以正常工作,但它需要接近2-3秒,这是在视图之间暂停应用程序的很长时间.
这可能是一个愚蠢的问题,但是:无论如何都要停止某个VC启动的所有进程?
我大多数时候都将这样的代码放在 viewWillDisappear 中,但我想这并不重要。
我认为问题在于您的会话委托未设置为零。只需在 viewDidDisappear 中添加以下内容:
self.session.delegate=nil;