メモリ解放の勘違い

ARCを使うようになってから、あまり意識しなくなってしまったが メモリ管理について、Effective Objective-C を読んで、今まで勘違いしてたことがわかった。

オブジェクトをリリースされたら、即座に使えないようになると考えていたけど 同書によると

オブジェクトが完全解放された時、そのメモリは利用可能メモリのプールに返されるだけ

とのこと。

完全解放の直後にNSLogなど、そのオブジェクトを使用しても それまでにメモリが上書きされていなければ、オブジェクトはまだ残されているので クラッシュせずに動いてしまうのです。

そういうことで、オブジェクトの開放を早めにし過ぎるバグは見つけにくいのですね。