为什么不给内存泄漏?

时间:2017-06-08 00:23:15

标签: objective-c memory-leaks

我有这个代码(从我正在遵循的教程中修改):

#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;
}

我打开了Profiler Leaks,然后运行它,期望得到泄漏,但没有任何显示。如果这会产生参考循环,为什么没有泄漏?

当我运行项目时,也没有输出。如果没有泄漏,为什么没有输出?

1 个答案:

答案 0 :(得分:0)

泄漏,这就是为什么没有输出 - 你的dealloc方法永远不会运行。

但是泄漏检测器从来没有机会检测到它,因为你的程序在百万分之一秒内就结束了。从长远来看,你没有任何持久状态,这就是将某些东西视为泄漏的必要条件。

如果您在应用中运行testRefCycle,例如应用程序本身会随着时间的推移而持续存在,您会看到泄漏报告。但是你不会在没有运行循环的单行命令行程序中看到它,这就是你所拥有的。