那么我正在研究一个非ARC项目,但是使用了使用ARC编写的Philipp Kyeck的socketio库.我正在使用本教程中介绍的方法合并非ARC项目和ARC库.
在我的ViewController文件中,我正在使用初始化套接字
SockIO *chatSockIO = [[SocketIO alloc] initWithDelegate:self];
Run Code Online (Sandbox Code Playgroud)
当我需要断开时,我打电话
[chatSockIO disconnect];
Run Code Online (Sandbox Code Playgroud)
这会导致socketIODidDisconnect委托方法触发.
- (void) socketIODidDisconnect:(SocketIO *)socket{
[chatSockIO release]; ==> is this call needed?
}
Run Code Online (Sandbox Code Playgroud)
现在我的问题是关于这条线[chatSockIO release].我们是否需要释放一个本身在ARC模式下定义但在非ARC项目中使用的对象?
现在,当我尝试发布时,我得到了一个例外
-[SocketIO retain]: message sent to deallocated instance 0x6fec370
Run Code Online (Sandbox Code Playgroud)
但是当我注释掉那一行时,我的内存泄漏和dealloc在我的库对象中根本没有被调用
忘记我提到的库,崩溃我的代码和泄漏.. 在非ARC项目中使用使用ARC方法定义的对象时的常规做法是什么.我应该只分配它,还是应该在使用后分配和释放它?
我在崩溃时运行zombie instrument,这就是它所说的..它显示了对alloc和release函数的调用.
# Address Category Event Type RefCt Timestamp Size Responsible Library Responsible Caller
0 0x72d5da0 SocketIO Malloc 1 00:09.700.274 64 MyProject -[MyViewController sendRequestForSocketIOPush]
1 0x72d5da0 SocketIO Retain 2 00:09.700.317 0 …Run Code Online (Sandbox Code Playgroud) 对于数据恢复程序,我需要能够从NSArchiver编写的文件中提取值+类型,而无需访问Apple的CF/NS框架.
OS X file命令报告以下文件:
NeXT/Apple typedstream data, little endian, version 4, system 1000
Run Code Online (Sandbox Code Playgroud)
是否有关于如何编码这些文件的文档,或者是否有人提出可以解析它们的代码?
以下是此类数据的示例(也可:可下载):
04 0B 73 74 72 65 61 6D 74 79 70 65 64 81 E8 03 ..streamtyped...
84 01 40 84 84 84 12 4E 53 41 74 74 72 69 62 75 ..@....NSAttribu
74 65 64 53 74 72 69 6E 67 00 84 84 08 4E 53 4F tedString....NSO
62 6A 65 63 74 00 85 92 84 84 84 …Run Code Online (Sandbox Code Playgroud)