正如您在类别中可以重写静态方法一样
+ (void)load
{
// do any setup for the class
}我想知道我怎样才能做同样的公关实例。真的有必要混用init-method吗?
发布于 2014-02-28 17:22:30
不,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 elsehttps://stackoverflow.com/questions/21156753
复制相似问题