保留周期和仪器

时间:2014-10-08 14:24:03

标签: ios objective-c instruments retain-cycle

我刚写了这个保留周期:

#import <Foundation/Foundation.h>
#import "Driver.h"
#import "Car.h"

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        Driver *driver = [[Driver alloc] init];
        Car *car = [[Car alloc] init];

        driver.car = car;
        car.driver = driver;
    }
    sleep(100);
    return 0;
}

显然,司机和汽车具有很强的性能。

无论如何,Instruments没有在Leaks中显示保留周期 - &gt;周期&amp;根据Xcode 6.1。

这是一个保留周期,对吗?那发生了什么?

2 个答案:

答案 0 :(得分:0)

保留周期不是泄漏。丢失对象的轨迹(参考)时发生泄漏。由于两个对象都引用了另一个对象,因此不会将其视为泄漏。因此,保留周期比泄漏更难找到。这取决于你的代码,你应该小心。

答案 1 :(得分:0)

好的,它现在正在工作:

@autoreleasepool {
    Driver *driver = [[Driver alloc] init];
    Car *car = [[Car alloc] init];

    driver.car = car;
    car.driver = driver;

    driver = nil;
    car = nil;

    for (size_t i = 0; i < 100000; i++) {
        driver = [[Driver alloc] init];
        car = [[Car alloc] init];
    }
}

使用此代码,Instruments会显示Leaks周期。