0

NSURLConnectionDataDelegate から返されるオブジェクトが、最初に作成したオブジェクトと同じかどうかを確認しています。私がやっていることは次のとおりです。

// TESTING TO SEE IF THE RETURNED OBJECT IS THE SAME ONE I CREATED
if(connection == [self connectionPartial]) {

しかし、これは次のことと同じであることに興味がありました:

if([connection isEqual:[self connectionPartial]]) {
4

2 に答える 2

1

最初のスニペットは、ポインター自体の値を比較します。まるで、int. アドレスが同じ場合、式は true と評価されます。

isEqual:2 番目は、接続インスタンスの 1 つにメッセージを送信します。どのクラスもオーバーライドisEqual:して、別のインスタンスとの「等価性」を定義できます。クラスの実装が次のようになることは完全に可能ですisEqual:

- (BOOL)isEqual: (id)obj
{
    return arc4random_uniform(2) ? YES: NO;
}

したがって、いいえ、ほとんどすべてのクラスで同等ではありません。(NSObjectの「デフォルト」実装を持つ はisEqual:、オブジェクトのhashes を使用します。これもデフォルトでは、それらのアドレスです。)

あなたの場合、等値演算子 を使用するの==は正しいようです。

于 2012-10-03T17:56:40.353 に答える
1

それは同じではありません

if(connection == [self connectionPartial]) {

これは、オブジェクトのアドレスを比較します。ポインターが同じインスタンスを指している場合。

if([connection isEqual:[self connectionPartial]]) {

これにより、オブジェクトの内容が比較されます。たとえば、2 つの別個のインスタンスの場合、文字列の内容が同じである限り、次のNSStringように返されます。YES

NSString *s1 = @"Something";
NSString *s2 = @"Something";
BOOL sameInstances = (s1 == s2);    // will be false, since they are separate objects.
BOOL sameContent = [s1 isEqual:s2]; // will be true, because they both are "Something"
于 2012-10-03T17:50:44.097 に答える