まとーか鈴木

千の姿と千の技と千の風

今ではあんまり役に立たない(かも)!非ARC時のメモリリーク調査方法

なんかオブジェクトがちゃんと解放されてないなーって時ありますね。

instrumentsとか色々な調査方法があると思うけど、
今日はiOS開発を始めてから今でもたまに使う術の1つを記載したいと思う。

やり方

retainをオーバーライドしてログを出す。

- (instancetype)retain{
    [super retain];
    NSLog(@"Log = %@",[NSThread callStackSymbols]);
}		

これだけ。

意図せずBlocksで循環参照していたり、
タイマーでretainされていたりとか分かったりする。

ログが沢山出るのは、条件分岐したり、ブレークポイントに条件指定したりすればオッケー。

deallocate instanceなエラーもreleaseをオーバーライドして最後の解放の原因が掴める。

これでサクッとバグが解決出来ればラッキーですね。