Я хочу использовать некоторые вещи из iOS 4.x в iOS 3.x.Я знаю, как их реализовать, я предполагаю, что моя реализация медленнее или может иметь больше ошибок, чем Apple, поэтому я хочу использовать Apple в любое время, когда она доступна.
Делает что-то вроде этого вменяемое:
@implementation NSDictionary (NSDictionary_4)
void compatability_method(Class class, SEL newer_version_selector, SEL compatability_selector) {
Method existingMethod = class_getInstanceMethod(class, newer_version_selector);
if (!existingMethod) {
Method compatabilityMethod = class_getInstanceMethod(class, compatability_selector);
class_replaceMethod(class, newer_version_selector, method_getImplementation(compatabilityMethod), method_getTypeEncoding(compatabilityMethod));
}
}
+(void)load {
if (self == [NSDictionary class]) {
compatability_method(self, @selector(enumerateKeysAndObjectsUsingBlock:), @selector(four_enumerateKeysAndObjectsUsingBlock:));
}
}
-(void)four_enumerateKeysAndObjectsUsingBlock:(void (^)(id key, id obj, BOOL *stop))block {
BOOL stop = false;
for (id key in self) {
block(key, [self objectForKey:key], &stop);
if (stop) {
break;
}
}
}
@end
Если это плохая идея, что было бы лучше?
(если это нормально, но код немного не в порядке, я тоже хотел бы знать это ... но яболее интересно узнать, является ли вся идея приличной или следует избегать такого рода конструкции)