NSProxy vs NSObject

Я использовал метод swizzling, чтобы обернуть все вызовы методов в классе с некоторой дополнительной функциональностью. В частности, я был:

  • Проверка наличия требуемого объекта для этого вызова метода в кеше
  • Если в кеше был возвращен этот объект.
  • Если нет, отправьте исходную реализацию, заполните кеш и верните это.

Для каждого метода я буду перенаправлять на рекомендуемый метод. И реализовать новый метод, используя + (BOOL) resolveInstanceMethod: (SEL) sel и IMP_implementationWithBlock.

Он отлично работал, но код не читал красиво. Кажется, что NSProxy обеспечит более простой способ реализовать эту функциональность.

Но еще одной альтернативой было бы просто включить подкласс класса NSObject и метод перехвата вокруг моих методов целевых объектов. Переопределяя forwardInvocation и methodSignatureForSelector, я могу получить требуемый результат.

Так что мне дает NSProxy? Почему я должен использовать это вместо этого?

Ответ 1

Точка NSProxy заключается в том, что она не реализует большинство методов. Это необходимо для того, чтобы убедиться, что для переадресации объекта "Цель-С" вызывается. Если вы начинаете с NSObject, существует множество методов, которые будут непосредственно отправлены без возможности переслать их.