What is the best (least code, fastest, most reliable) way to compare two NSUUIDs
?
Here is an example:
-(BOOL)isUUID:(NSUUID*)uuid1 equalToUUID:(NSUUID*)uuid2
{
return ... // YES if same or NO if not same
}
From the NSUUID class reference:
Note: The NSUUID class is not toll-free bridged with CoreFoundation’s CFUUIDRef. Use UUID strings to convert between CFUUID and NSUUID, if needed. Two NSUUID objects are not guaranteed to be comparable by pointer value (as CFUUIDRef is); use isEqual: to compare two NSUUID instances.
So just use the following:
-(BOOL)isUUID:(NSUUID*)uuid1 equalToUUID:(NSUUID*)uuid2
{
return [uuid1 isEqual:uuid2];
}
You don't need to create an extra method for this, as the documentation states that
NSUUID objects are not guaranteed to be comparable by pointer value (as CFUUIDRef is); use isEqual: to compare two NSUUID instances.
So just do BOOL sameUUID = [uuid1 isEqual:uuid2];
NSUUID effectively wraps uuid_t.
Solution...
@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
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With