Ios 如何比较NSUID

Ios 如何比较NSUID,ios,objective-c,ios7,uuid,nsuuid,Ios,Objective C,Ios7,Uuid,Nsuuid,比较两个nsuid的最佳(最少代码、最快、最可靠)方法是什么 以下是一个例子: -(BOOL)isUUID:(NSUUID*)uuid1 equalToUUID:(NSUUID*)uuid2 { return ... // YES if same or NO if not same } 实现这一点的一个合理简单的方法是使用字符串比较。然而,利用底层CFUUIDRef的方法可能更快 -(BOOL)isUUID:(NSUUID*)uuid1 equalToUUID:(NSUUID*)uui

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

以下是一个例子:

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

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

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

从NSUID类引用:

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

因此,只需使用以下方法:

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

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

NSUID对象不能保证按指针值进行比较 (与CFUUIDRef一样);使用isEqual:比较两个NSUID实例


所以只需执行
boolsameuuid=[uuid1isequal:uuid2]

NSUID有效地包装uuid\u 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
@实现nsuid(比较)
-(NSComparisonResult)比较:(nsuid*)那个
{
uuid_t x;
uuid_t y;
[self-getuuidb:x];
[得到uuidbytes:y];
常数int r=memcmp(x,y,sizeof(x));
if(r<0)
回报率下降;
如果(r>0)
退而求其次;
返回指定名称;
}
@结束

我想知道投反对票的原因。“额外方法”的目的只是为了进一步解释这个问题。我也会对这个问题投反对票的原因感兴趣;-)。比较是必要的,因为[nil isEqual:uuid2]也会返回NO,对吗?这非常重要,因为NSSortDescriptor使用compare:method。我将NSFetchedRequest与NSPredicate和NSSortDescriptor一起使用,NSSortDescriptor按uuid属性进行排序并导致崩溃(无比较:选择器与NSUID一起存在)-这修复了它。非常感谢。