2013-12-11 11 views
5

NSUUIDsを比較するには最良の(最小のコード、最速の、最も信頼性の高い)方法は何ですか?ここでNSUUIDを比較するには

は例です。これを実現するために

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

答えて

7

注:NSUUIDクラスは、フリーダイヤルCoreFoundationのの CFUUIDRefで架橋ではありません。 が必要な場合は、UUID文字列を使用してCFUUIDとNSUUIDを変換します。 2つのNSUUIDオブジェクトは、 ポインタ値(CFUUIDRefのように)で比較できることが保証されていません。 isEqual:を使用して2つのNSUUID インスタンスを比較します。

だから次のコマンドを使用します。

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

は、必要に応じて比較したものである[のisEqualはnil:UUID2]また、NO正しい返すでしょうか? – Joshcodes

0

合理的な簡単な方法は、文字列比較を使用することです。ただし、基になるCFUUIDRefを使用する方法が高速になる場合があります。 NSUUIDクラス参照から

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

documentation

NSUUIDオブジェクトがあることが保証されていないと述べているとしてあなたは、このために余分なメソッドを作成する必要はありませんポインタ値で比較すると (CFUUIDRefとして); 2つのNSUUIDインスタンスを比較するには、isEqual:を使用します。

だからやる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