由于我没有使用 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
您可以按类添加过滤器,以便仅为您怀疑的特定类运行调试代码。