Как получить доступ к свойствам target-c в методах класса - PullRequest
2 голосов
/ 11 августа 2011

Невозможно получить доступ к свойству target-c в методе класса, подобном следующему:

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

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

Этот MyClass является одноэлементным объектом, поэтому есть способ, которым я могу получить доступ к этому объектуиспользуя метод класса в MyClass?Как UIApplication делает с [UIApplication sharedApplication]

Ответы [ 2 ]

2 голосов
/ 11 августа 2011

Фактически одноэлементный объект - это обычный объект, который имеет только один экземпляр, который возвращается с помощью метода класса в ObjC или статического метода в C ++. Это означает, что вам нужен один метод класса, подобный этому:

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

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

    return shared_class;
}
1 голос
/ 11 августа 2011

Если вы пытаетесь реализовать одноэлементный метод, вам следует возвращать экземпляр 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];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...