最近从崩溃系统发现NSNumber 的compare方法如果对比的是nil会导致崩溃,而string不会。因为首先考虑了Hook该方法(Hook系统API),但是Hook完发现NSDcitionary每次查询都要比较一次,严重会影响性能,因此放弃该方法,改用category方法。
代码如下:
@interface NSNumber (SafeComparer)
- (BOOL)isSafeEqualToNumber:(NSNumber *)aNumber;
- (NSComparisonResult)safeCompare:(NSNumber *)aNumber;
@end
@implementation NSNumber (SafeComparer)
- (BOOL)isSafeEqualToNumber:(NSNumber *)aNumber
{
if ( aNumber )
{
return [self isEqualToNumber:aNumber];
}
return NO;
}
- (NSComparisonResult)safeCompare:(NSNumber *)aNumber
{
if (aNumber) {
return [self compare:aNumber];
}
return NSOrderedDescending;
}
@end