8

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

这是一个例子:

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

4 回答 4

11

从 NSUUID 类参考:

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

所以只需使用以下内容:

-(BOOL)isUUID:(NSUUID*)uuid1 equalToUUID:(NSUUID*)uuid2
{
    return [uuid1 isEqual:uuid2];
}
于 2013-12-11T17:31:12.193 回答
8

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

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

所以就这样做BOOL sameUUID = [uuid1 isEqual:uuid2];

于 2013-12-11T17:45:01.150 回答
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
于 2017-12-29T00:03:24.160 回答
0

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

-(BOOL)isUUID:(NSUUID*)uuid1 equalToUUID:(NSUUID*)uuid2
{
    return [[uuid1 UUIDString] isEqualToString:[uuid2 UUIDString]];
}
于 2013-12-11T17:23:10.417 回答