gpt4 book ai didi

ios - iOS 延迟初始化

转载 作者:可可西里 更新时间:2023-11-01 04:44:05 25 4
gpt4 key购买 nike

数据来自 JSON 格式的服务器,它被放置在 NSDictionary 中。根据请求数据的类型,新的类对象将从此 NSDictionary 创建。有很多数据来了,所以该对象持有对 NSDictionary 的引用,并且仅在引用特定变量时才提取值。像延迟初始化这样的东西:

- (NSString *)imgURL {
if (_imgURL == nil) {
_imgURL = [self makeObjForKey:kImageURL];
}
return _imgURL;
}

这会显着提高应用程序速度,但会产生其他问题:

  1. 如果一个值在 NSDictionary 中不存在,它仍然是 nil。然后对于此变量的每个后续调用都会在 NSDictionary 中搜索它。
  2. 当复制类的整个实例时(NSCopying 协议(protocol)),所有变量都被复制,从整个 NSDictionary 产生转换。

解决方案:

  1. 放置一些标志,表明该值已被检查。但那时你必须添加额外的检查
  2. 只为对象实例复制NSDictionary,但之后必须复制再次解析相同的变量

无论如何,这些解决方案都不是最优的。也许有人遇到了类似的问题并且可以建议其他技术。

最佳答案

NSDictionary 查找非常快。除非这是一本真正庞大的字典,否则我不会太担心查找。如果你有一些特别经常检查的属性,那么你可以用一个特殊的标志来优化它们,但我通常不会担心它。

对于复制,我的第一个建议是使该对象成为一个值(不可变)对象。使用 JSON 对其进行一次初始化,然后不提供任何修改器(这可能是您已经在做的事情)。那么复制是微不足道的;只需返回 self。您不需要制作真正的副本,因为所有副本都可以互换。值对象的一大好处是它们的复制非常便宜和容易。

如果您有时真的需要一个可变版本,那么请遵循 NSArray/NSMutableArray 模式。然后只有可变版本必须处理副本(在这种情况下,您应该只复制字典;而不是缓存的对象)。

关于ios - iOS 延迟初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21313682/

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