在类方法中访问objective-c属性是不可能的:
@interface MyClass
@property (nonatomic, retain) NSMutableArray myStudents;
@end
@implementation MyClass
+ (id)myClassMethod { return self.myStudents; } // bad
@end
这个MyClass碰巧是一个单例对象,所以有没有办法可以使用MyClass中的类方法访问该对象?就像UIApplication与[UIApplication sharedApplication]
答案 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];