首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >实例上类别的+[NSObject load]的等价物是什么

实例上类别的+[NSObject load]的等价物是什么
EN

Stack Overflow用户
提问于 2014-01-16 16:30:08
回答 1查看 163关注 0票数 2

正如您在类别中可以重写静态方法一样

代码语言:javascript
运行
复制
+ (void)load
{
    // do any setup for the class
}

我想知道我怎样才能做同样的公关实例。真的有必要混用init-method吗?

EN

回答 1

Stack Overflow用户

发布于 2014-02-28 17:22:30

不,AFAIK没有办法做到这一点。取而代之的是这样做

代码语言:javascript
运行
复制
#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

当像这样测试时

代码语言:javascript
运行
复制
NSObject *obj = [[NSObject alloc] init];
[obj xxx_doSomething];
[obj xxx_doSomethingElse];

结果是

代码语言:javascript
运行
复制
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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21156753

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档