ios – NSArray containsObject:更快的替代方案?

ios – NSArray containsObject:更快的替代方案?,第1张

概述我在使用Instruments的iOS应用程序上运行了一些运行,我发现启动时主线程上的90%负载(总共大约1000ms)是由containsObject:calls引起的.这是主线程,我不认为这很酷. 这种方法有更快的替代方案吗?算法或其他方法? 有什么建议? 更多信息: >我再次查看了我的代码,我意识到事实上我不需要知道对象的顺序,只有当一个对象是该集合的一部分时.这意味着NSSet会做得很好( 我在使用Instruments的iOS应用程序上运行了一些运行,我发现启动时主线程上的90%负载(总共大约1000ms)是由containsObject:calls引起的.这是主线程,我不认为这很酷.

这种方法有更快的替代方案吗?算法或其他方法?

有什么建议?

更多信息:

>我再次查看了我的代码,我意识到事实上我不需要知道对象的顺序,只有当一个对象是该集合的一部分时.这意味着NSSet会做得很好(我想更快).
>对象数 – 该集合中可能有1000个对象.

解决方法 如果您需要使用阵列,请稍微向下跳过

替代选项

您的其他选择可能包括:

>使用NSDictionary,它使用key->值对(我希望)具有O(1)读取复杂性,代价是密钥的额外存储空间
>如果您没有使用重复项并且顺序不重要,使用NSSet将提供更好的读取复杂性(我不知道复杂性会是什么,文档可能会)

使用数组

如果对数组进行排序,则可以在O(log n)时间内进行搜索,而不是O(n),因为您可以利用二进制搜索.

Caveat Lector:这是从记忆中写的

-(voID) /*adding*/{    int proposedindex = 0;    proposedindex = [array indexOfObject:node                                inSortedRange:NSMakeRange(0,array.count)                                      options:NSBinarySearchingInsertionIndex                              usingComparator:                      ^ NSComparisonResult(ID obj1,ID obj2)                      {                          if (obj1.valuetoCompare < obj2.valuetoCompare) return NSOrderedAscending;                          if (obj1.valuetoCompare > obj2.valuetoCompare) return NSOrderedDescending;                          else return NSOrderedSame;                      }];    [array insertObject:node atIndex:proposedindex];}-(ID) /* Getting */{    int location = [array indexOfObject:node                                    inSortedRange:NSMakeRange(0,array.count)                                          options:NSBinarySearchingFirstEqual                                  usingComparator:                          ^ NSComparisonResult(ID obj1,ID obj2)                          {                              if (obj1.valuetoCompare < obj2.valuetoCompare) return NSOrderedAscending;                              if (obj1.valuetoCompare > obj2.valuetoCompare) return NSOrderedDescending;                              else return NSOrderedSame;                          }];    if (location == NSNotFound) return nil;    return [array objectAtIndex:location];}
总结

以上是内存溢出为你收集整理的ios – NSArray containsObject:更快的替代方案?全部内容,希望文章能够帮你解决ios – NSArray containsObject:更快的替代方案?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1101812.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-28
下一篇 2022-05-28

发表评论

登录后才能评论

评论列表(0条)

保存