Мы используем Swizzling в Objective-C. Для удобства мы используем вспомогательные методы CoconutKit для достижения этой цели:Swizzling - выбор метода выбора в Objective-C iOS
HLSSwizzleSelectorWithBlock_Begin([TMObjectCache class], @selector(objectForKey:))
^(TMObjectCache *self, NSString *key) {
key = nil;
return ((id (*)(id, SEL, NSString*))_imp)(self, _cmd, key);
}
HLSSwizzleSelectorWithBlock_End;
Мы хотели бы, однако, также не-надираться этот метод после того, как какой-то момент в коде. Есть ли способ сделать это?
«swizzling невероятно опасен, хрупок, в первую очередь полезен для отладки, и его следует избегать в производственном коде». За исключением того, что Cocoa wlll счастливо сделает это за вас за спиной. :( – matt
Да, но люди, которые делали KVO, имели доступ к исходному коду, и все разработчики Apple знают, что не сломать KVO. У них нет такого же беспокойства по поводу ваших swizzles. (Конечно, KVO isa-swizzling, не метод-swizzling. Знаете ли вы, что применяемый Apple метод - swizzle, который я забываю?) –
Я думаю, что KVO был главным, что я имел в виду, как вы говорите, это не метод swizzling, но я все еще считаю с подозрением (хотя я вынужден его использовать). – matt