Skip to content

Instantly share code, notes, and snippets.

@markshiz
Last active December 10, 2015 08:48
Show Gist options
  • Save markshiz/4410356 to your computer and use it in GitHub Desktop.
Save markshiz/4410356 to your computer and use it in GitHub Desktop.
A deep equality comparison for any NSObject
- (BOOL)isEqual:(id)object {
if ( [object isMemberOfClass:self.class] ) {
unsigned int count;
Ivar* ivars = class_copyIvarList(self.class, &count);
for(unsigned int i = 0; i < count; ++i) {
NSObject* lhs = object_getIvar(self, ivars[i]);
NSObject* rhs = object_getIvar(object, ivars[i]);
if ( [lhs isKindOfClass:NSObject.class] && [rhs isKindOfClass:NSObject.class] ) {
if ( ![lhs isEqual:rhs] ) {
free(ivars);
return NO;
}
} else {
free(ivars);
return NO;
}
}
free(ivars);
return YES;
}
return NO;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment