Что эквивалентно +[NSObject load] для категории в экземпляре
Как вы по категориям можете переопределить статический метод
+ (void)load
{
// do any setup for the class
}
Мне интересно, как я могу сделать тот же PR-экземпляр. Неужели нужно метить init-метод?
1 ответ
Нет, AFAIK нет способа для этого. Вместо этого сделайте что-то вроде этого
#import <Foundation/Foundation.h>
#import <objc/runtime.h>
@interface NSObject (XXXCategory)
@end
@implementation NSObject (XXXCategory)
- (void)xxx_setup
{
static void * XXXDidSetupPropertKey;
NSNumber *didSetupValue = objc_getAssociatedObject(self, XXXDidSetupPropertKey); BOOL didSetup = [didSetupValue boolValue];
if(!didSetup)
{
objc_setAssociatedObject(self, XXXDidSetupPropertKey, @YES, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
NSLog(@"Setting up category");
}
}
- (void)xxx_doSomething
{
[self xxx_setup];
NSLog(@"do something");
}
- (void)xxx_doSomethingElse
{
[self xxx_setup];
NSLog(@"do something else");
}
@end
При тестировании, как это
NSObject *obj = [[NSObject alloc] init];
[obj xxx_doSomething];
[obj xxx_doSomethingElse];
Результат
2014-02-28 10:21:04.024 Untitled 2[27026:507] Setting up category
2014-02-28 10:21:04.025 Untitled 2[27026:507] do something
2014-02-28 10:21:04.026 Untitled 2[27026:507] do something else