如何比较NSUUID



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

这里有一个例子:

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

来自NSUUID类引用:

注意:NSUUID类不是与CoreFoundation的免费桥接CFUIDRef。如果需要。两个NSUUID对象不能保证通过指针值(作为CFUIDRef);使用isEqual:比较两个NSUUID实例。

所以只需使用以下内容:

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

您不需要为此创建额外的方法,因为文档中指出

NSUUID对象不能保证通过指针值进行比较(如CFUIDRef);使用isEqual:比较两个NSUUID实例。

所以只需执行BOOL sameUUID = [uuid1 isEqual:uuid2];

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

实现这一点的一个合理而简单的方法是使用字符串比较。然而,利用底层CFUUIDRef的方法可能更快。

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

最新更新