LookinIvarTrace.m 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. //
  2. // LookinIvarTrace.m
  3. // Lookin
  4. //
  5. // Created by Li Kai on 2019/4/30.
  6. // https://lookin.work
  7. //
  8. #import "LookinIvarTrace.h"
  9. NSString *const LookinIvarTraceRelationValue_Self = @"self";
  10. @implementation LookinIvarTrace
  11. #pragma mark - Equal
  12. - (NSUInteger)hash {
  13. return self.hostClassName.hash ^ self.ivarName.hash;
  14. }
  15. - (BOOL)isEqual:(id)object {
  16. if (self == object) {
  17. return YES;
  18. }
  19. if (![object isKindOfClass:[LookinIvarTrace class]]) {
  20. return NO;
  21. }
  22. LookinIvarTrace *comparedObj = object;
  23. if ([self.hostClassName isEqualToString:comparedObj.hostClassName] && [self.ivarName isEqualToString:comparedObj.ivarName]) {
  24. return YES;
  25. }
  26. return NO;
  27. }
  28. #pragma mark - <NSCopying>
  29. - (id)copyWithZone:(NSZone *)zone {
  30. LookinIvarTrace *newTrace = [[LookinIvarTrace allocWithZone:zone] init];
  31. newTrace.relation = self.relation;
  32. newTrace.hostClassName = self.hostClassName;
  33. newTrace.ivarName = self.ivarName;
  34. return newTrace;
  35. }
  36. #pragma mark - <NSCoding>
  37. - (void)encodeWithCoder:(NSCoder *)aCoder {
  38. [aCoder encodeObject:self.relation forKey:@"relation"];
  39. [aCoder encodeObject:self.hostClassName forKey:@"hostClassName"];
  40. [aCoder encodeObject:self.ivarName forKey:@"ivarName"];
  41. }
  42. - (instancetype)initWithCoder:(NSCoder *)aDecoder {
  43. if (self = [super init]) {
  44. self.relation = [aDecoder decodeObjectForKey:@"relation"];
  45. self.hostClassName = [aDecoder decodeObjectForKey:@"hostClassName"];
  46. self.ivarName = [aDecoder decodeObjectForKey:@"ivarName"];
  47. }
  48. return self;
  49. }
  50. + (BOOL)supportsSecureCoding {
  51. return YES;
  52. }
  53. @end