Как передать свойство в качестве параметра метода, а затем установить его равным нулю в блоке в Objective- C? - PullRequest
0 голосов
/ 29 мая 2020

У меня следующая ситуация, когда я отправляю свойство self.view, которое содержит некоторое представление, в качестве параметра для метода ниже:

- (void) someMethod:(UIView *)view
{
    [UIView animateWithDuration:.25 delay:0 options: UIViewAnimationOptionAllowUserInteraction animations:^
     {
        //blablabla
     }
    completion:^(BOOL finished)
     {
        [view removeFromSuperview];
        view = nil;
     }];
}

Где компилятор сообщает мне:

Переменная не может быть назначена (отсутствует спецификатор типа __block)

Я пытаюсь добавить спецификатор типа блока к параметру, и это не работает. Я хочу, чтобы когда я установил view на nil, он также установил свойство self.view на nil. У меня проблемы с осознанием этой ситуации, особенно когда вы бросаете в нее блок, я думаю, обычно мне нужен двойной указатель?

Мне интересно, как лучше всего подойти к этому, где я могу от self.view до nil использовать параметр в блоке метода.

Ответы [ 2 ]

0 голосов
/ 29 мая 2020

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

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

0 голосов
/ 29 мая 2020

in objective- C, __ сделать вашу переменную совместно используемой между лексической областью видимости переменной и всеми блоками и копиями блоков, объявленными или созданными в лексической области видимости переменной. В этом случае я предлагаю вам создать флаг, а в блоке вы вызываете другую функцию, чтобы что-то сделать с представлением. Я думаю, что это плохой способ сохранить компонент пользовательского интерфейса как общую переменную. Иногда он может взламывать sh ваши приложения.

...