Использование супер в категории Objective C?

Да, проверьте getImageData (). Вот пример повреждающейся капчи с JavaScript с помощью холста:

http://ejohn.org/blog/ocr-and-neural-nets-in-javascript/

24
задан Brad Parks 10 September 2009 в 13:35
поделиться

2 ответа

Категории расширяют исходный класс, но не подклассифицируют его, поэтому вызов super не находит метод.

То, что вы хотите, называется Method Swizzling . Но имейте в виду, что ваш код может что-то сломать. Есть статья о Theocacao, написанная Скотом Стивенсоном о методе Swizzling в старой среде выполнения Objective-C, Какао с любовью, Мэтт Галлахер имеет статью о методе Swizzling в новой среде выполнения Objective-C 2.0 и его простой замене.

В качестве альтернативы, вы можете создать подкласс класса, а затем использовать подкласс или используйте + (void) PoseAsClass: (Class) aClass для замены суперкласса. Apple пишет:

Метод, определенный классом позирования. можно, отправив сообщение на super , включить метод суперкласса переопределяет.

Имейте в виду, что Apple устарела PoseAsClass: в Mac OS X 10.5.

29
ответ дан 28 November 2019 в 23:45
поделиться

Если вы будете кодировать этот класс, просто переименуйте селектор на то, что может использовать ваш код, и вызовите исходный селектор на self :

@implementation SampleClass (filePathResolver)
-(NSString*) myFullPathFromRelativePath:(NSString*) relPath
{
    NSString *result = [self fullPathFromRelativePath: relPath];

  ... do some stuff with the old result

    return result;
}

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

8
ответ дан 28 November 2019 в 23:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: