iOS Как получить доступ к себе из метода класса? - PullRequest
0 голосов
/ 16 сентября 2011

Мне интересно, как я могу получить доступ к self из метода класса.

В этом методе экземпляра у меня нет проблем с доступом к себе:

- (void) ccTouchesEnded:(NSSet *) touches withEvent:(UIEvent *) event{

    UITouch *theTouch = [touches anyObject];
    if (theTouch.tapCount == 2) {

        // self is available here to change background but I need to call it from 
        // a class method since it's being invoked elsewhere.

        [TouchTrailLayer testCall];
    }
}

+ (void) testCall {
    [TouchTrailLayer changeBackground];
}

Как мне сослатьсясамостоятельно в методе класса ниже, как если бы это был метод экземпляра?Или, как вы вызываете метод экземпляра, используя метод класса (выберите лучший)?

+ (void) changeBackground {

    // this is where self doesn't work

    [self removeChildByTag:100 cleanup:YES];
    CGSize size = [[CCDirector sharedDirector] winSize];
    CCSprite *bg = [CCSprite spriteWithFile:@"Default-hd.png"];
    bg.position = ccp( size.width /2 , size.height/2 );
    bg.tag = 100;
    [self addChild:bg z:0];
}

Ответы [ 2 ]

2 голосов
/ 16 сентября 2011

Как правило, вы не можете получить "self" в методе static / class, потому что может не быть экземпляров класса вообще или их может быть несколько.

Однако, если вы знаете, что может быть только один экземпляр класса, вы можете реализовать что-то по принципу «синглтона».

0 голосов
/ 25 ноября 2013

Singleton очень удобен и может служить большинству целей, которых пытаются достичь методы класса. Однако вы можете вызывать self внутри метода класса, чтобы вызвать другой метод класса того же класса. Другим незначительным моментом является то, что в вашем методе экземпляра вы можете использовать [self class] для вызова метода класса, вместо того, чтобы указывать имя класса. Это более портативный и элегантный IMO.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...