【问题标题】:Objective C - Release using Core-DataObjective C - 使用 Core-Data 发布
【发布时间】:2011-06-07 05:38:39
【问题描述】:

从内存管理的角度来看,这是一个正确的代码吗?

NSEntityDescription *description = [NSEntityDescription
                                        entityForName:@"Event" inManagedObjectContext:managedObjectContext];
NSFetchRequest *eventRequest = [[[NSFetchRequest alloc] init] autorelease];
[eventRequest setEntity:description];
[description release];

NSPredicate *eventPredicate = [NSPredicate predicateWithFormat:
                                      @"(event == %@)", [item objectForKey:@"event"]];
[eventRequest setPredicate:eventPredicate];

或者我需要发布描述和事件谓词?

谢谢

【问题讨论】:

    标签: iphone memory-management


    【解决方案1】:

    查看该代码,您拥有的唯一对象是eventRequest。它正在自动释放,因此您无需再次释放它。

    据我所知,根据命名约定,所有其他对象都不拥有,因此您无需释放它们。

    [description release]; 行可能会导致您在该行的某个地方崩溃。

    【讨论】:

    • 阅读下一条评论说它是正确的..所以我不知道答案是什么..
    • description 不应该被释放,因为它不是通过名称中包含“alloc”、“copy”、“retain”或“new”的方法提供给您的。遵循 Cocoa 的命名约定,名称不包含这些单词的方法不应返回对对象的拥有引用(保留计数为 +1)。就您而言,在这种情况下,您的对象的保留计数为 0,您不应释放它。
    • 请你检查一下这个问题,因为我不知道正确答案是什么?谢谢stackoverflow.com/questions/4659020/…
    【解决方案2】:

    您不需要该代码的任何版本。你应该阅读Apple's documentation 找出原因。

    【讨论】:

      猜你喜欢
      • 2018-09-03
      • 1970-01-01
      • 2019-05-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-19
      • 2011-04-29
      相关资源
      最近更新 更多