Closed jiangleligejiang closed 5 years ago
NSSet
存储自定义对象,应该重写对象的isEqualTo
和hash
方法因为
NSSet
需要保证对象的唯一性,而这个唯一性的判断是根据isEqualTo
和hash
方法来判断的。- (void)commit { if (!_target || !_selector) { return; } YYTransactionSetup(); [transactionSet addObject:self]; }
(NSUInteger)hash { long v1 = (long)((void *)_selector); long v2 = (long)_target; return v1 ^ v2; }
(BOOL)isEqual:(id)object { if (self == object) { return YES; } if (![object isMemberOfClass:self.class]) { return NO; } YYTransaction other = (YYTransaction )object; return other.target == self.target && other.selector == self.selector; }
NSPointerArray
、NSMapTable
和NSHashTable
对象池的使用
(void)setup { self.recyclePool = [[NSMutableSet alloc] init]; }
(void)recycle { UIView *view = .... [self.recyclePool addObject: view]; [view removeFromSuperView]; }
(void)reuse { UIView *view = [self.recyclePool anyObject]; if (view) { //do something for clear up } }