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クラスは、フリーダイヤルCoreFoundationのの CFUUIDRefで架橋ではありません。 が必要な場合は、UUID文字列を使用してCFUUIDとNSUUIDを変換します。 2つのNSUUIDオブジェクトは、 ポインタ値(CFUUIDRefのように)で比較できることが保証されていません。 isEqual:を使用して2つのNSUUID インスタンスを比較します。
だから次のコマンドを使用します。
-(BOOL)isUUID:(NSUUID*)uuid1 equalToUUID:(NSUUID*)uuid2
{
return [uuid1 isEqual:uuid2];
}
合理的な簡単な方法は、文字列比較を使用することです。ただし、基になるCFUUIDRef
を使用する方法が高速になる場合があります。 NSUUIDクラス参照から
-(BOOL)isUUID:(NSUUID*)uuid1 equalToUUID:(NSUUID*)uuid2
{
return [[uuid1 UUIDString] isEqualToString:[uuid2 UUIDString]];
}
NSUUIDオブジェクトがあることが保証されていないと述べているとしてあなたは、このために余分なメソッドを作成する必要はありませんポインタ値で比較すると (CFUUIDRefとして); 2つのNSUUIDインスタンスを比較するには、isEqual:を使用します。
だからやる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はnil:UUID2]また、NO正しい返すでしょうか? – Joshcodes