私は EAAccessory の経験がないので、これが実行可能かどうかはわかりませんが、ここに提案があります。デバッグの保持/解放から(rentzsch.tumblr.com):
#if 1
- (id)retain {
NSUInteger oldRetainCount = [super retainCount];
id result = [super retain];
NSUInteger newRetainCount = [super retainCount];
printf("%s<%p> ++retainCount: %lu => %lu\n", [[self className] UTF8String], self, oldRetainCount, newRetainCount);
printf("%s\n", [[[NSThread callStackSymbols] description] UTF8String]);
return result;
}
- (void)release {
NSUInteger oldRetainCount = [super retainCount];
BOOL gonnaDealloc = oldRetainCount == 1;
if (gonnaDealloc) {
printf("%s<%p> --retainCount: 1 => 0 (gonna dealloc)\n", [[self className] UTF8String], self);
printf("%s\n", [[[NSThread callStackSymbols] description] UTF8String]);
}
[super release];
if (!gonnaDealloc) {
NSUInteger newRetainCount = [super retainCount];
printf("%s<%p> --retainCount: %lu => %lu\n", [[self className] UTF8String], self, oldRetainCount, newRetainCount);
printf("%s\n", [[[NSThread callStackSymbols] description] UTF8String]);
}
}
#endif
クラスごとにフィルターを追加して、疑わしい特定のクラスに対してのみデバッグ コードを実行できます。