2013-12-11 76 views
5

什麼是比較兩個NSUUIDs的最佳(最小編碼,最快,最可靠)方式?如何比較NSUUID

下面是一個例子:

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

回答

7

從NSUUID類參考:

注:NSUUID類不是免費電話用的CoreFoundation的 CFUUIDRef橋接。如果需要 ,請使用UUID字符串在CFUUID和NSUUID之間進行轉換。通過 指針值(因爲CFUUIDRef是),兩個NSUUID對象不保證可比較;使用isEqual:比較兩個NSUUID 實例。

所以只要使用以下命令:

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

是比較必要的,[無isEqual:方法UUID2]也將返回NO,是否正確? – Joshcodes

0

合理的簡單的方法來完成,這是使用字符串比較。但是,利用底層CFUUIDRef的方法可能會更快。

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

你不需要爲此創造一個額外的方法,爲documentation指出

NSUUID對象不能保證可通過指針值 (如CFUUIDRef所示)進行比較;使用isEqual:比較兩個NSUUID實例。

所以只是做BOOL sameUUID = [uuid1 isEqual:uuid2];

+0

我會對減票的原因感興趣。 – tilo

+1

同上。我已經投票給你了。 –

+0

「額外方法」的目的只是爲了進一步解釋問題。我也會對這個問題的投票結果感興趣---)。 – Joshcodes

1

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