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