【问题标题】:How to compare NSUUID如何比较 NSUUID
【发布时间】:2013-12-11 17:23:10
【问题描述】:

比较两个NSUUIDs 的最佳(最少代码、最快、最可靠)方法是什么?

这是一个例子:

-(BOOL)isUUID:(NSUUID*)uuid1 equalToUUID:(NSUUID*)uuid2
{
    return ... // YES if same or NO if not same
}

【问题讨论】:

    标签: ios objective-c ios7 uuid nsuuid


    【解决方案1】:

    来自 NSUUID 类参考:

    注意:NSUUID 类不是与 CoreFoundation 的免费桥接的 CFUUID参考。使用 UUID 字符串在 CFUUID 和 NSUUID 之间进行转换,如果 需要。不保证两个 NSUUID 对象具有可比性 指针值(如 CFUUIDRef 一样);使用 isEqual: 比较两个 NSUUID 实例。

    所以只需使用以下内容:

    -(BOOL)isUUID:(NSUUID*)uuid1 equalToUUID:(NSUUID*)uuid2
    {
        return [uuid1 isEqual:uuid2];
    }
    

    【讨论】:

    • 是否有必要进行比较,因为 [nil isEqual:uuid2] 也会返回 NO,对吗?
    【解决方案2】:

    您不需要为此创建额外的方法,因为 documentation 声明

    不保证 NSUUID 对象可以通过指针值进行比较 (因为 CFUUIDRef 是);使用 isEqual: 比较两个 NSUUID 实例。

    那么就做BOOL sameUUID = [uuid1 isEqual:uuid2];

    【讨论】:

    • 我会对投反对票的原因感兴趣。
    • “额外方法”的目的只是为了进一步解释问题。我也会对对该问题投反对票的原因感兴趣;-)。
    【解决方案3】:

    NSUUID 有效地包装了 uuid_t。

    解决方案...

    @implementation  NSUUID ( Compare )
    
    
    
    - ( NSComparisonResult )  compare : ( NSUUID * )  that
    {
       uuid_t   x;
       uuid_t   y;
    
       [ self  getUUIDBytes : x ];
       [ that  getUUIDBytes : y ];
    
       const int   r  = memcmp ( x, y, sizeof ( x ) );
    
       if ( r < 0 )
          return  NSOrderedAscending;
       if ( r > 0 )
          return  NSOrderedDescending;
    
       return  NSOrderedSame;
    }
    
    
    
    @end
    

    【讨论】:

    • 这很重要,因为 NSSortDescriptor 使用 compare: 方法。我将 NSFetchedRequest 与 NSPredicate 和 NSSortDescriptor 一起使用,它是按 uuid 属性排序的并且发生了崩溃(没有比较:选择器与 NSUUID 一起存在) - 这修复了它。谢谢。
    【解决方案4】:

    一个合理的简单方法是使用字符串比较。但是,使用底层CFUUIDRef 的方法可能更快。

    -(BOOL)isUUID:(NSUUID*)uuid1 equalToUUID:(NSUUID*)uuid2
    {
        return [[uuid1 UUIDString] isEqualToString:[uuid2 UUIDString]];
    }
    

    【讨论】:

      猜你喜欢
      • 2023-03-07
      • 1970-01-01
      • 2012-11-10
      • 2012-09-04
      • 2012-04-29
      • 2011-03-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多