什麼是比較兩個NSUUIDs
的最佳(最小編碼,最快,最可靠)方式?如何比較NSUUID
下面是一個例子:
-(BOOL)isUUID:(NSUUID*)uuid1 equalToUUID:(NSUUID*)uuid2
{
return ... // YES if same or NO if not same
}
什麼是比較兩個NSUUIDs
的最佳(最小編碼,最快,最可靠)方式?如何比較NSUUID
下面是一個例子:
-(BOOL)isUUID:(NSUUID*)uuid1 equalToUUID:(NSUUID*)uuid2
{
return ... // YES if same or NO if not same
}
從NSUUID類參考:
注:NSUUID類不是免費電話用的CoreFoundation的 CFUUIDRef橋接。如果需要 ,請使用UUID字符串在CFUUID和NSUUID之間進行轉換。通過 指針值(因爲CFUUIDRef是),兩個NSUUID對象不保證可比較;使用isEqual:比較兩個NSUUID 實例。
所以只要使用以下命令:
-(BOOL)isUUID:(NSUUID*)uuid1 equalToUUID:(NSUUID*)uuid2
{
return [uuid1 isEqual:uuid2];
}
合理的簡單的方法來完成,這是使用字符串比較。但是,利用底層CFUUIDRef
的方法可能會更快。
-(BOOL)isUUID:(NSUUID*)uuid1 equalToUUID:(NSUUID*)uuid2
{
return [[uuid1 UUIDString] isEqualToString:[uuid2 UUIDString]];
}
你不需要爲此創造一個額外的方法,爲documentation指出
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
是比較必要的,[無isEqual:方法UUID2]也將返回NO,是否正確? – Joshcodes