gpt4 book ai didi

ios - 有向/间接图内存管理?

转载 作者:行者123 更新时间:2023-11-29 12:56:50 24 4
gpt4 key购买 nike

例如我有 Edge 和 Node 类:

@interface Node

@property ... NSArray *edges;

@end


@interface Edge

@property ... Node *nodeFrom;
@property ... Node *nodeTo;

@end

我应该如何定义这些属性 - 分配/保留?因为如果我将它们定义为分配对象,那么它们可能会过早释放内存。但是,如果我将它们定义为保留项,那么它们可能会紧密相连,因为它们相互保留。

如何解决这个问题?

最佳答案

你可以这样设置,所以节点拥有它们的边:

@interface Node

@property (strong) NSArray *edges;

@end


@interface Edge

@property (weak) Node *nodeFrom;
@property (weak) Node *nodeTo;

@end

这样,边将在它们的两个节点都被释放时被释放。

no built-in way to notify the edges that a node has deallocated ,因此您最终可能会得到只有一个节点的边。

有两种解决方法:

  1. 在依赖这条边之前检查nodeFromnodeTo是否都已设置。
  2. -[Node dealloc] 中,遍历 edges 数组并通知边缘该节点将解除分配。然后,该边可以向另一个节点发送一条消息,表明它不再是有效边,另一个节点可以解除分配无效边。

旁注,NSSet 可能比 NSArray 更适合edges,因为边是无序的。

关于ios - 有向/间接图内存管理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20871733/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com