さて、私は非ARCプロジェクトに取り組んでいますが、ARCを使用して作成されたPhilippKyeckのsocketioライブラリを使用しています。このチュートリアルで説明されている方法を使用して、非ARCプロジェクトとARCライブラリをマージします。
ViewControllerファイルで、を使用してソケットを初期化しています
SockIO *chatSockIO = [[SocketIO alloc] initWithDelegate:self];
切断する必要があるときは、電話します
[chatSockIO disconnect];
これにより、socketIODidDisconnectデリゲートメソッドが起動します。
- (void) socketIODidDisconnect:(SocketIO *)socket{
[chatSockIO release]; ==> is this call needed?
}
今私の質問は行について[chatSockIO release]
です。それ自体がARCモードで定義されているが、非ARCプロジェクトで使用されているオブジェクトをリリースする必要がありますか?
リリースを試したところ、例外が発生しました。
-[SocketIO retain]: message sent to deallocated instance 0x6fec370
しかし、その行をコメントアウトすると、ライブラリオブジェクトのメモリリークとdeallocがまったく呼び出されなくなります。
バウンティタイム!!
私が言及したライブラリを忘れて、コードでクラッシュしてリークします。非ARCプロジェクトで、ARCメソッドを使用して定義されたオブジェクトを使用する場合の通常の方法は何ですか。割り当てるだけですか、それとも使用後に割り当てて解放する必要がありますか?
編集:いくつかのより多くの情報。
クラッシュ時にゾンビインストゥルメントを実行しました。これは、それが言わなければならなかったことです。これは、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 MyProject -[SocketIO initWithDelegate:]
2 0x72d5da0 SocketIO Release 1 00:09.700.320 0 MyProject -[SocketIO initWithDelegate:]
3 0x72d5da0 SocketIO Retain 2 00:09.700.440 0 Foundation -[NSURLConnectionInternal initWithInfo:]
4 0x72d5da0 SocketIO Retain 3 00:10.413.717 0 Foundation -[NSURLConnectionInternal _withConnectionAndDelegate:onlyActive:]
5 0x72d5da0 SocketIO Release 2 00:10.413.761 0 Foundation -[NSURLConnectionInternalConnection invokeForDelegate:]
6 0x72d5da0 SocketIO Retain 3 00:10.413.797 0 Foundation -[NSURLConnectionInternal _withConnectionAndDelegate:onlyActive:]
7 0x72d5da0 SocketIO Release 2 00:10.413.811 0 Foundation -[NSURLConnectionInternalConnection invokeForDelegate:]
8 0x72d5da0 SocketIO Retain 3 00:10.413.816 0 Foundation -[NSURLConnectionInternal _withConnectionAndDelegate:onlyActive:]
9 0x72d5da0 SocketIO Release 2 00:10.415.087 0 Foundation -[NSURLConnectionInternalConnection invokeForDelegate:]
10 0x72d5da0 SocketIO Retain 3 00:10.415.214 0 Foundation -[NSURLConnectionInternal _withConnectionAndDelegate:onlyActive:]
11 0x72d5da0 SocketIO Release 2 00:10.415.216 0 Foundation -[NSURLConnectionInternalConnection invokeForDelegate:]
12 0x72d5da0 SocketIO Release 1 00:10.415.275 0 Foundation -[NSURLConnectionInternalConnection invokeForDelegate:]
13 0x72d5da0 SocketIO Retain 2 00:10.969.432 0 GraphicsServices GSEventRunModal
14 0x72d5da0 SocketIO Release 1 00:10.969.433 0 GraphicsServices GSEventRunModal
15 0x72d5da0 SocketIO Retain 2 00:10.969.434 0 GraphicsServices GSEventRunModal
16 0x72d5da0 SocketIO Release 1 00:10.969.456 0 GraphicsServices GSEventRunModal
17 0x72d5da0 SocketIO Retain 2 00:10.969.459 0 GraphicsServices GSEventRunModal
18 0x72d5da0 SocketIO Retain 3 00:10.969.488 0 Foundation -[NSCFTimer initWithFireDate:interval:target:selector:userInfo:repeats:]
19 0x72d5da0 SocketIO Release 2 00:10.976.115 0 MyProject -[SocketIO setTimeout]
20 0x72d5da0 SocketIO Retain 3 00:10.976.125 0 Foundation -[NSCFTimer initWithFireDate:interval:target:selector:userInfo:repeats:]
21 0x72d5da0 SocketIO Release 2 00:10.976.161 0 GraphicsServices GSEventRunModal
22 0x72d5da0 SocketIO Retain 3 00:13.935.328 0 GraphicsServices GSEventRunModal
23 0x72d5da0 SocketIO Release 2 00:13.935.373 0 MyProject -[SocketIO setTimeout]
24 0x72d5da0 SocketIO Retain 3 00:13.935.399 0 Foundation -[NSCFTimer initWithFireDate:interval:target:selector:userInfo:repeats:]
25 0x72d5da0 SocketIO Release 2 00:13.935.685 0 MyProject -[SocketIO onDisconnect]
26 0x72d5da0 SocketIO Release 1 00:13.935.705 0 MyProject -[MyViewController socketIODidDisconnect:]
27 0x72d5da0 SocketIO Release 0 00:13.935.716 0 GraphicsServices GSEventRunModal
28 0x72d5da0 SocketIO Zombie -1 00:13.936.298 0 GraphicsServices GSEventRunModal