Какой самый простой способ определить внутри метода, был ли он вызван впервые с момента запуска приложения? - PullRequest
0 голосов
/ 17 июля 2009

У меня есть метод, при котором я запускаю анимацию при запуске. Во время использования приложения метод вызывается много раз, но при первом вызове ему необходимо дополнительно выполнить некоторые специальные действия.

Синглтоны - это путь? Может быть, есть и лучший способ, вместо того, чтобы измерять, сколько раз был вызван этот метод, и хранить его в иваре.

Ответы [ 3 ]

7 голосов
/ 17 июля 2009
- (void)someMethod {
    static BOOL hasBeenCalledBefore = NO;
    if (!hasBeenCalledBefore) {
        // perform setup
        hasBeenCalledBefore = YES;
    }
    // do other stuff
}

Может потребоваться дополнительная работа, если вы используете потоки, но это основная идея.

2 голосов
/ 17 июля 2009

Поправка к ответу Чака (почти правильная)

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

Если вы хотите, чтобы он вызывался для каждого нового класса, используйте ответ Чака, но с переменной-членом, или используйте инициализатор класса.

2 голосов
/ 17 июля 2009

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

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