0

我刚刚写了这个保留循环:

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

显然,Driver 和 Car 具有很强的属性。

无论如何,Instruments 没有在 Xcode 6.1 上的 Leaks -> Cycles & Roots 中显示保留周期。

这是一个保留周期,对吗?那是怎么回事?

4

2 回答 2

0

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

于 2014-10-08T14:37:36.483 回答
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 上显示循环。

于 2014-10-08T15:58:54.900 回答