-1

我有一个 Button 是否正确,它基本上将 NSManagedObject 传递给 segue 以加载下一个视图,在下一个视图中我加载父 NSManaged 对象的子对象。当我销毁该控制器时,NSManagedObject 仍由原始按钮与子按钮一起保留。我假设它会在我下次加载相同的数据时被释放,因为它会覆盖 NSManaged 对象的该属性。但是保留所有这些子对象是不好的还是正常的?

我应该/我可以通过在某个时候将属性设置为 nil 来手动释放这些孩子吗?

让我为我所看到的内容提供更多背景信息。

仪器

-[品牌页面]的内容

- (NSArray *) pages {


  NSLog(@"%@", [self edetail]);

  if ([self edetail] != nil) {

    NSArray *pgs = [[[self edetail] pages] allObjects];
    return [pgs sortedArrayUsingDescriptors:[NSArray arrayWithObject:[NSSortDescriptor sortDescriptorWithKey:@"sort_order" ascending:YES]]];
  }
  return [NSArray array];
}

假设我有一个 objectA 的 NSArray,我们是一个 NSSet,我从 coredata 中提取并排序。然后我遍历 Array 中的每个 objectA 并创建一个自定义按钮类,该类的属性设置为 objectA。当单击按钮时,我向 UINavigationController 发送一条消息,以转到使用该 ObjectA 拉取某个子数组/ObjectA 集并在自定义网格中显示数据的页面。

根据工具,当我弹出已将 ObjectA 传递给的 UIViewController 时,ObjectA 仍在保留那些子对象,而 ObjectA 仍由我的按钮保留。这真的是一个糟糕的设计吗?这似乎并不比我的 RootViewController 保留这些对象的 NSArray 并通过索引调用它们更糟糕。

不过,我觉得在使用该应用程序的过程中,我最终可能会实际引用核心数据中的每条数据,这让我担心,即使我不需要这些孩子也不会被释放。

4

1 回答 1

1

托管对象上下文负责托管对象的内存管理。这是一个可怕的句子。

如果您修改托管对象的属性或创建新对象,则假设您希望它们保留在 MOC 中,除非您将其回滚或不保存。如果您有一个托管对象保存在一个强属性中,那么您就不会泄漏或真正使用额外的内存 - 如果 MOC 遇到内存压力,它将把对象变成故障。

我有点担心您关于按钮保留托管对象的说法,这听起来不是一个好的设计。如果您将托管对象作为 segue 的一部分传递,则按钮不需要具有或保留对它的引用 - 这就是视图控制器的工作。

于 2013-01-30T21:25:57.913 回答