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一起存在)-这修复了它。非常感谢。