【问题标题】:Use transient property on any Core Data attribute that doesn't need to be saved?在不需要保存的任何核心数据属性上使用瞬态属性?
【发布时间】:2013-10-03 05:12:34
【问题描述】:

我正在尝试了解瞬态属性。我有这个对象:

@interface AddressAnnotation : NSObject <MKAnnotation>

@property (nonatomic, copy) NSString *address;
@property (nonatomic, copy) NSString *city;
@property (nonatomic, strong) NSNumber *latitude;
@property (nonatomic, strong) NSNumber *longitude;
@property (nonatomic, assign) CLLocationCoordinate2D coordinate;
@property (nonatomic, strong) NSString *state;
@property (nonatomic, strong) NSString *street;
@property (nonatomic, strong) NSString *zip;
@property (nonatomic, strong) NSString *name;

我使用它在 MKMapView 上显示我的注释。我想将这些引脚保存在某个 Route 实体中。路线只会让用户命名路线。对于我的应用程序,唯一真正重要的是纬度和经度。由于我有纬度/经度,我总是可以使用反向地理编码器重新计算其他属性。为了节省空间,我在想如果我想让这个对象成为一个Core Data实体,我可以把所有不是经纬度瞬态属性的属性都做成吗?我阅读了一些示例,其中瞬态用于基于其他非瞬态属性计算的属性。这是对瞬态的正确使用吗?谢谢。

【问题讨论】:

  • 您担心什么样的“空间”?内存还是磁盘空间?你有多少个对象?你可能正在解决一个不存在的问题。另请注意,临时属性不能用于获取请求。

标签: ios core-data


【解决方案1】:

在这种情况下,您可以在示例中应用瞬态属性。从我的角度来看,您仍然可以在核心数据中保留一些属性,以避免冗余查询以备后用。例如,您可以使用反向地理编码的地址,通过经度和纬度获取真实地址。但是每次使用反向地理编码器时,您都会让用户等待查询地址。如果该属性需要一些计算或等待连接,我更愿意将这些属性保留在核心数据中。

【讨论】:

  • 如果我存储所有这些值,您认为会增加很多额外的内存吗?
  • 最重要的是不要同时从核心数据中检索很多记录。我会做一些配置文件分析,以确保我在正常情况下使用的内存不会对 iPhone 造成问题。顺便说一句,如果您的 mkmapview 移动到另一个区域,请确保删除那些注释不可见的地图也会减少内存使用量。
猜你喜欢
  • 2011-06-17
  • 1970-01-01
  • 2014-11-26
  • 2013-09-10
  • 2012-03-10
  • 1970-01-01
  • 2012-08-02
  • 2011-12-18
  • 2014-11-26
相关资源
最近更新 更多