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