在ARC中泄漏

时间:2012-12-22 20:23:55

标签: objective-c ios ios5 automatic-ref-counting

我有一个单例对象,它是我的应用程序的一个模块,在这个模块中创建的所有对象与任何其他模块没有任何关系。我的应用程序创建了这个单例对象,这个对象进一步创建了它没有任何类型的子对象我的应用程序中除了这个模块之外的其他对象的关系。所以在这个模块任务结束后,我将这个模块对象设置为nil。但是两个对象没有解除分配并显示在xcode的工具中.singelton对象是正确的解除分配,但它的两个子对象仍留在记忆中。

我的项目完全是ARC。那么编译器在将父单元(singelton对象)设置为nil之后不释放单独子对象的原因是什么。

提前致谢

2 个答案:

答案 0 :(得分:1)

  

但是两个对象没有解除分配并显示在xcode的工具中.singelton对象正在解除分配,但是它的两个子对象仍留在内存中。

我担心会有一个保留周期 所以例如child1指向child2而反之。要打破这个循环,你应该使用弱引用 我看不到代码所以这只是一个想法。

答案 1 :(得分:-1)

如果你在其中初始化更多的对象,然后再次调用超级对象,则单例通常是一个问题。 因为还没有分配单例静态变量。

您可以通过执行以下操作来阻止此操作:


单例文件

+ (SomeClass *)sharedInstance {
    if (!_someStaticInstance) {
        _someStaticInstance = [[SomeClass alloc]init];
    }

    return _someStaticInstance;
}

- (void)initialise {
    // do the real initialising here
}

创建文件

[[SomeClass sharedInstance] initialise];