1

我最近将我的 iPhone 升级到了 iOS 6.1,当我发布 EASession 对象时,我开发并在 iOS 5.0 上成功运行的应用程序现在崩溃了。

控制台中出现以下错误日志:

-[NSRecursiveLock dealloc]: lock (<NSRecursiveLock: 0x1f5afa00> '(null)') deallocated while still in use
Break on _NSLockError() to debug.
-[NSRecursiveLock unlock]: message sent to deallocated instance 0x1f5afa00

导致问题的代码行是:

[_session release];

导致此问题的两个 iOS 版本发生了什么变化?

非常感谢。

4

1 回答 1

0
- (void)closeSession{

[[_session inputStream] close];
[[_session inputStream] removeFromRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
[[_session inputStream] setDelegate:nil];
[[_session outputStream] close];
[[_session outputStream] removeFromRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
[[_session outputStream] setDelegate:nil];
if (_session){
   MCRelease(_session);
}
}

(NSRecursiveLock: 0x1f5afa00) 在仍在使用时释放,当您释放会话时会发生此问题,同时有输入和输出。

在您的代码中,不要自己释放会话,而是调用 closeSession。检查来自苹果的 EA 框架示例。希望这会有所帮助。

于 2013-04-15T14:24:23.703 回答