【问题标题】:Accessing a property in NSManagedObject causes memory spike and crash访问 NSManagedObject 中的属性会导致内存峰值和崩溃
【发布时间】:2009-09-25 11:56:30
【问题描述】:

我正在编写一个使用核心数据进行存储的 iPhone 应用程序。我所有的 NSManagedObject 子类都是由 xcode 基于我的数据模型自动生成的。其中一个类如下所示:

@interface Client :  NSManagedObject  
{
}

@property (nonatomic, retain) NSNumber * rate;
@property (nonatomic, retain) NSString * name;
@property (nonatomic, retain) NSString * description;
@property (nonatomic, retain) NSSet* projects;

@end

创建和保存此类的新实例可以正常工作,但是当我尝试访问此类实例的“描述”属性时,程序意外退出。在 Instruments 中运行时,我可以看到就在崩溃之前,大量内存被快速分配(这可能是应用退出的原因)。

访问属性的代码如下所示:

self.clientName = [[client.name copy] autorelease];
self.clientRate = [[client.rate copy] autorelease];
self.textView.text = client.description; // This is where it crashes

请注意,可以毫无问题地访问其他属性(名称和速率)。

那我做错了什么?

【问题讨论】:

  • 你不应该使用点符号来描述,因为它不是一个属性,它只是一个方法。当然点表示法有效,但我相信最终它会在编译器或 Clang 静态分析器中引起警告。

标签: iphone memory core-data


【解决方案1】:

来自 Apple 文档(Core Data 编程指南):

注意,属性名称不能与任何无参数的方法名称 NSObject 或 NSManagedObject 相同,例如,不能给属性命名为“description”(参见 NSPropertyDescription)。

正如 jbrennan 所述,这应该是您遇到的问题的原因。

【讨论】:

  • 是的,就是这样。终于解脱了!非常感谢!
猜你喜欢
  • 1970-01-01
  • 2017-08-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-14
  • 2014-11-22
  • 2016-02-21
  • 1970-01-01
相关资源
最近更新 更多