比较两者的最佳(最少代码、最快、最可靠)方法是NSUUIDs
什么?
这是一个例子:
-(BOOL)isUUID:(NSUUID*)uuid1 equalToUUID:(NSUUID*)uuid2
{
return ... // YES if same or NO if not same
}
比较两者的最佳(最少代码、最快、最可靠)方法是NSUUIDs
什么?
这是一个例子:
-(BOOL)isUUID:(NSUUID*)uuid1 equalToUUID:(NSUUID*)uuid2
{
return ... // YES if same or NO if not same
}
从 NSUUID 类参考:
注意:NSUUID 类不是与 CoreFoundation 的 CFUUIDRef 桥接的免费电话。如果需要,使用 UUID 字符串在 CFUUID 和 NSUUID 之间进行转换。不能保证两个 NSUUID 对象可以通过指针值进行比较(就像 CFUUIDRef 一样);使用 isEqual: 比较两个 NSUUID 实例。
所以只需使用以下内容:
-(BOOL)isUUID:(NSUUID*)uuid1 equalToUUID:(NSUUID*)uuid2
{
return [uuid1 isEqual:uuid2];
}
您不需要为此创建额外的方法,因为文档指出
NSUUID 对象不保证可通过指针值进行比较(如 CFUUIDRef 一样);使用 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]];
}