Как получить доступ к самому себе в методе класса Цель C

У меня есть служебный класс, который использует методы класса. Я пытаюсь сослаться на себя в методе класса, но не могу. Мне было интересно, как я объявил бы следующее в методе класса:

[MRProgressOverlayView showOverlayAddedTo:self.window animated:YES];

self.window это говорит тип ссылки члена struct objc_class *' is a pointer; maybe you meant to use '->'

Еще одна проблема, связанная с невозможностью позвонить self как бы я сослался на объявленный @property в моем .h в методе класса в моем .m,

Вот мой метод класса:

.m
+ (void)showHUD
{
    [UIApplication sharedApplication].networkActivityIndicatorVisible=YES;
    [MRProgressOverlayView showOverlayAddedTo:self.window animated:YES];

    //I would preferably like to call my property here instead
}


.h
@property (nonatomic) MRProgress * mrProgress;

2 ответа

Решение

Весь смысл метода класса в том, что он не является частью конкретного экземпляра. Внутри метода класса, self это класс.

Если вам нужно привязать к конкретному экземпляру, то это должен быть метод экземпляра. Если вам нужен статический метод, который обращается к конкретному экземпляру, передайте этот экземпляр (self) к нему (хотя трудно представить много случаев, когда это имеет смысл).

В приведенном выше примере showHUD должен быть методом экземпляра почти наверняка. Если по какой-то причине это не имеет смысла, то это должно быть:

+ (void)showHUDForWindow:(UIWindow *)window;

Затем вы можете назвать это как showHUDForWindow:self.window и используйте это по мере необходимости.

Вы можете использовать шаблон синглтона. Шаблон Singleton предполагает, что существует единственный экземпляр вашего класса. Поскольку это единственный экземпляр, вы можете использовать его из методов класса.

Пример реализации:

+ (MyClass*)sharedInstance {
    static dispatch_once_t once;
    static MyClass *sharedMyClass;
    dispatch_once(&once, ^ {
        sharedMyClass = [[self alloc] init];
    });
    return sharedMyClass;
}

Затем вы можете получить доступ к общему экземпляру через [MyClass sharedInstance], например:

+ (void)doSomethingCool {
   [[self sharedMyClass] doSomething];
}
Другие вопросы по тегам