我正在检查我从 NSURLConnectionDataDelegate 返回的对象是否与我最初创建的对象相同。我一直在做的是:
// TESTING TO SEE IF THE RETURNED OBJECT IS THE SAME ONE I CREATED
if(connection == [self connectionPartial]) {
但只是好奇这和做的一样:
if([connection isEqual:[self connectionPartial]]) {
我正在检查我从 NSURLConnectionDataDelegate 返回的对象是否与我最初创建的对象相同。我一直在做的是:
// TESTING TO SEE IF THE RETURNED OBJECT IS THE SAME ONE I CREATED
if(connection == [self connectionPartial]) {
但只是好奇这和做的一样:
if([connection isEqual:[self connectionPartial]]) {
这不一样。
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"
第一个片段比较指针本身的值,就好像它们是任何原始类型,如int
. 如果地址相同,则表达式将评估为真。
第二个将消息发送isEqual:
到连接实例之一。任何类都可以重写isEqual:
以定义与另一个实例的“平等”。一个类的实现完全有可能isEqual:
是:
- (BOOL)isEqual: (id)obj
{
return arc4random_uniform(2) ? YES: NO;
}
所以,不,对于几乎所有的类,它们都不等价。( NSObject
,它具有 的“默认”实现isEqual:
,使用对象的hash
es,默认情况下,它是它们的地址。)
听起来==
在您的情况下使用相等运算符 , 是正确的。