【问题标题】:NSSet with CLRegion Objects带有 CLRegion 对象的 NSSet
【发布时间】:2013-05-12 15:43:01
【问题描述】:

我有两套使用

NSMutableSet *monitoredRegionSet = [[locationManager monitoredRegions]mutableCopy];

另一个是使用

获得的
NSMutableSet *regionSet = [NSMutableSet setWithCapacity:regionChunks.count];
CLRegion *region = [[CLRegion alloc] initCircularRegionWithCenter:coordinate radius:radius        
identifier:regionString];
[regionSet addObject:region];

当我尝试在它们之间设置操作时它不起作用。我是否应该实现一个 CLRegion 类别并实现 isEqual: 和 hash: 方法。有没有更好的方法来做到这一点。

[monitoredRegionSet intersectSet:regionSet];
[monitoredRegionSet minusSet:regionSet];

【问题讨论】:

标签: iphone ios set


【解决方案1】:
CLRegion *region = 
    [[CLRegion alloc] initCircularRegionWithCenter:coordinate 
        radius:radius        
    identifier:regionString];

这是一个全新的、不同的区域对象。在没有任何内置的区域相等概念的情况下,可以保证包含此区域对象的集合与先前存在的区域对象集合之间没有交集。

正如您正确暗示的那样,您可以使用 CLRegion isEqual:hash。但这真的是你想做的事吗?一个更好的问题可能是:您实际上想在这里完成什么?例如,直接从第一个集合中绘制第二个集合的区域可能更合适、更简单。

编辑:您最简单的方法可能是这样的:

https://stackoverflow.com/a/7197192/341994

只需停止监控所有区域并从一组新区域重新开始(当然,其中一些区域可能恰好与您已经监控的区域相同)。 p>

【讨论】:

  • 我将区域信息作为字符串获取,我使用它解析和构建区域。我需要停止监视不再有效的区域并开始监视新的区域。
  • 因此,给定区域信息,只需枚举第一组并查看是否已经存在等效区域。
  • 或者只是停止监视您正在监视的所有内容并重新开始,正如我在编辑的答案中所建议的那样。保持简单。
  • 是的,可以做到,但由于可能有很多区域,我试图优化这部分代码。
  • 不要过早优化! CLRegion 非常轻量级,只不过是一个结构。这里没有什么可以优化的。当您真正遇到速度/内存问题时保存优化。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-21
  • 1970-01-01
  • 2011-05-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多