LookinIvarTrace.m 1.7 KB

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