0
我有这样的代码(从教程中,我以下修改):为什么不给内存泄漏?
#import <Foundation/Foundation.h>
@class Car;
@class Person;
@interface Person: NSObject
@property Car* owningCar;
@end
@implementation Person:NSObject
-(void)dealloc {
NSLog(@"Person is gone");
}
@end
@interface Car:NSObject
@property Person* owner;
@end
@implementation Car:NSObject
-(void)dealloc {
NSLog(@"Car is gone");
}
@end
void testRefCycle() {
Person* me = [[Person alloc] init];
Car* civic = [[Car alloc] init];
me.owningCar = civic;
civic.owner = me;
}
int main(int argc, const char * argv[]) {
@autoreleasepool {
testRefCycle();
}
return 0;
}
我打开了探查泄漏,并运行它,希望得到泄漏,但没有显示出来。如果创建参考周期,为什么没有泄漏?
当我运行该项目时,也没有输出。如果没有泄漏,为什么没有输出?
这是非常奇怪的,它只在第6秒钟捕获泄漏,最后我添加了一个'getchar'。我想Profiler确实有其局限性。 – texasbruce
探查器的工作原理是每隔几秒钟暂停应用程序并拍摄已用指针的快照。所以如果你的程序运行时间不够长,它将没有足够的数据。像这样测试短代码的简单方法是将其放在一个循环中,并运行几千次左右。这样做的另一个优点是任何小的泄漏都经常重复以至于更容易发现。 – uliwitness