Должен ли я проверить существование Слабого Я перед использованием @strongify (self) в ReactiveObj c? - PullRequest
0 голосов
/ 16 марта 2020

Как и другая практика слабых и сильных, она рекомендует проверить, является ли слабый сам ноль, прежде чем усиливать его. Это выглядит так:

__weak weakself = self
someblock {
  if (weakself) {
    __strong self = weakself
    [self doSomeAction];
...
  }
}

Я знаю, что ra c проделывает большую работу впереди, но я хочу убедиться, нужно ли нам это проверять или нет. И если нет, то как @strongify (self) делает это. Спасибо.

1 Ответ

0 голосов
/ 16 марта 2020

Нет, вы должны проверить после strongify, потому что он может прекратить существовать, пока вы не укрепите его.

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

if (weakself) { // not nil here
    __strong self = weakself //already nil here
    [self doSomeAction]; //you don't have retain cycles,
    // but there is a potentical crash, for example if you are calling blocks

@ strongify делают это точно так, как вы уже пишете, это просто вспомогательный макрос:

__strong typeof(weakSelf) self = weakself
...