保持サイクルを明示的に探す必要があると思います。階層内に、関連オブジェクトを持つ親オブジェクト オブジェクトがあり、両方に強い型のプロパティがある場合、それらはメモリから解放されません。
簡単な例:
@interface Parent : NSObject
@property (strong) Child *child;
@end
@interface Child : NSObject
@property (strong) Parent *parent;
@end
また、プロパティはデフォルトでstrongなので、何も宣言しなくても同じです。
それがあるべき方法:
@interface Parent : NSObject
@property (strong) Child *child;
@end
@interface Child : NSObject
@property (weak) Parent *parent;
@end
また、Instruments がサイクルを保持していることを示すことができるという情報も見つけました (そして、それは良さそうです)。詳細はこちらARC の下のインスツルメントでサイクル レポートを有効にする方法は? ただし、ARC で動作するかどうかはわかりません。コメントは、動作しないことを示唆している可能性があります。面倒な方法として、責任があると思われるコードをコメントアウトしてから、画像を確認することをお勧めします。
これが保持サイクルです。もう 1 つ確認する必要があるのは、ARC が返すことができないメモリを割り当てる場合です。これらの呼び出しは C 関数のように見え、慣例により名前に Create という単語が含まれています。そのようなポインターを作成するたびに、自分自身もきれいにする必要があります。いくつかの例を挙げると:
- CGColorCreate - CGColorRelease
- CGColorSpaceCreateWithName - CGColorSpaceRelease
- CGBitmapContextCreate - CGContextRelease
ご覧のとおり、各関数には対応する解放関数があり、通常はドキュメントで見つけることができます。