我想重寫UIColor
isEqual:
方法。我在類別方法中這樣做,但它似乎並沒有被調用,無論是從NSArray
的containsObject:
,還是直接調用,如下所示。重寫UIColor的isEqual:類別內的方法
它已經作爲類別頭文件中的方法公開,我也檢查過該類別是否已導入到我正在處理的實現文件中。
當它被直接調用:
UIColor *col = [UIColor eightBitColorWithRed:pxl.red green:pxl.green blue:pxl.blue];
int index = -1;
for (int i = 0; i < self.colorArrayM.count; i++) {
if ([col isEqual:((UIColor*)self.colorArrayM[i])]) {
index = i;
break;
}
}
和類別方法:
-(BOOL) isEqual:(id)otherColor {
if (otherColor == self)
return YES;
if (!otherColor || ![otherColor isKindOfClass:[self class]])
return NO;
return [self isEqualToColor:otherColor];
}
-(BOOL) isEqualToColor:(UIColor*)otherColor {
if (self == otherColor)
return YES;
unsigned char r0, r1, g0, g1, b0, b1;
[self eightBitRed:&r0 green:&g0 blue:&b0];
[otherColor eightBitRed:&r1 green:&g1 blue:&b1];
return r0 == r1 && g0 == g1 && b0 == b1;
}
嘗試調整和它_seemed_切換實現,即'method_exchangeImplementations(originalMethod,swizzledMethod)'被調用,但是當調用顏色上的'isEqual:'時,沒有打印來自我的自定義方法的日誌,也沒有停止任何斷點...(不知道這種混合是否會搞砸?)。 我最終在NSArray上爲'containsColor:'和'indexOfColor:'添加了一個類別,它從我的UIColor類別中調用了我的自定義方法。 –