Я использовал метод swizzling, чтобы обернуть все вызовы методов в класс с некоторыми дополнительными функциями. В частности, я был:
- Проверка наличия в кеше необходимого объекта для этого вызова метода
- Если в кеше есть этот объект, верните его.
- Если нет, отправьте исходную реализацию, заполните кеш и верните его.
Для каждого метода я бы перенаправлял на рекомендованный метод. И реализуйте новый метод, используя + (BOOL) resolveInstanceMethod: (SEL) sel и IMP_implementationWithBlock.
Он работал нормально, но код читался плохо. Кажется, NSProxy предоставит более изящный способ реализации этой функции.
Но еще одной альтернативой было бы просто иметь подкласс NSObject для замены и перехватывать вызовы методов вокруг методов моего целевого объекта. Переопределив forwardInvocation и methodSignatureForSelector, я могу получить требуемый результат.
Так что же мне дает NSProxy? Почему я должен использовать это вместо этого?