如何在类方法中访问objective-c属性

时间:2011-08-11 18:44:59

标签: objective-c singleton

在类方法中访问objective-c属性是不可能的:

@interface MyClass
@property (nonatomic, retain) NSMutableArray myStudents;
@end

@implementation MyClass
+ (id)myClassMethod { return self.myStudents; } // bad
@end

这个MyClass碰巧是一个单例对象,所以有没有办法可以使用MyClass中的类方法访问该对象?就像UIApplication与[UIApplication sharedApplication]

一样

2 个答案:

答案 0 :(得分:2)

实际上,singleton对象是一个普通的对象,它只有一个实例,它通过ObjC中的类方法或C ++中的静态方法返回。这意味着您需要一个类方法:

+(MyClass*) shared {
    static MyClass* shared_class = NULL;

    @synchronized( shared_class ) {
        if( !shared_class ) {
           shared_class = [MyClass new];
        }
    }

    return shared_class;
}

答案 1 :(得分:1)

如果您尝试实现单例方法,那么您应该返回 MyClass 的实例,而不是任何数据的NSMutableArray。像这样:

static MyClass * singleton ;

@interface MyClass : NSObject {}

@implementation MyClass

static NSString * LOCK = @"Whatever";

+ (MyClass *) sharedInstance {
    @synchronized(LOCK) {
        if(singleton == nil) {
            singleton = [[MyClass alloc] init];
        }
    }

    return singleton;
}

@end

这是伪代码,但你得到了要点。然后你就像在其他地方一样使用它:

MyClass * foobar = [MyClass sharedInstance];
[foobar doSomeStuff];