【问题标题】:Alternative data structure - Preventing memory leak in ios5 with ARC替代数据结构 - 使用 ARC 防止 ios5 中的内存泄漏
【发布时间】:2012-05-03 22:57:19
【问题描述】:

我有一个数据结构,我正在尝试使用 ARC 将 ios5 存储在目标 c 中。 数据结构类似于 -

Class - **Book**
@property (strong) NSArray *pages;
@property (strong) Page *startingPage;

Class - **Page**
@property (strong) Book *book;
@property (strong) Page *nextPage;
@property (strong) Page *previousPage;

可以想象的问题是内存泄漏。 这里有几个循环 -

Book -> pages -> page -> book
nextPage -> previousPage
Book -> startingPage -> book.

我不能使属性变弱,因为如果这样做,我将丢失指向该值的指针。 因此,假设我将 Page 中的 book 设为弱,那么当我尝试释放页面时,book 将被释放。但是,我仍然希望这本书保持分配状态。

有没有其他的方法可以存储这个数据结构?

谢谢!

【问题讨论】:

    标签: ios5 data-structures memory-leaks linked-list automatic-ref-counting


    【解决方案1】:

    我不明白为什么制作 Page->book weak 会让你失去指向这本书的指针。弱属性在它们指向的对象被释放之前不会自动归零。只要至少一个其他对象具有对book 的强引用,就可以了。

    所以想象一个图书馆对象有一个 NSArray 书籍。该数组保留添加到其中的书籍,因此对该书的所有弱引用都将保持有效,直到该书从数组中删除(并隐式释放)。

    【讨论】:

    • 但是如果没有其他指向“书”的强指针怎么办?所以在你的例子中说,如果所有书籍的 NSArray 都对 Library 有一个弱引用,那么 Library 将被取消,因为没有对它的强引用。做到这一点的唯一方法是每本书都强烈引用图书馆,这就是问题所在。
    • @Devang 我正在努力想一个对对象的所有引用都很弱的场景。没有任何物体是一座孤岛——确实应该有某物声称拥有它。如果没有,那很可能是设计不佳的迹象。什么对象负责书?你能解释一下为什么你不希望它有一个强引用吗?
    • 你是对的,我可以保留对对象的强引用,这将保证其余引用的行为符合预期。谢谢!
    猜你喜欢
    • 2012-04-03
    • 2012-09-14
    • 1970-01-01
    • 2012-02-20
    • 1970-01-01
    • 2010-09-21
    • 1970-01-01
    • 2016-07-10
    • 2011-12-05
    相关资源
    最近更新 更多