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

一样。

if(connection == [self connectionPartial]) {

这将比较对象的地址,例如。如果指针指向同一个实例。

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

这将比较对象的内容。例如对于两个单独的实例,只要字符串内容相同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 回答
1

第一个片段比较指针本身的值,就好像它们是任何原始类型,如int. 如果地址相同,则表达式将评估为真。

第二个将消息发送isEqual:到连接实例之一。任何类都可以重写isEqual:以定义与另一个实例的“平等”。一个类的实现完全有可能isEqual:是:

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

所以,不,对于几乎所有的类,它们都不等价。( NSObject,它具有 的“默认”实现isEqual:,使用对象的hashes,默认情况下,它是它们的地址。)

听起来==在您的情况下使用相等运算符 , 是正确的。

于 2012-10-03T17:56:40.353 回答