Недавно я прочитал this post и подумал, что было бы неплохо использовать советы из статьи. Я использую его в блоках, но должен ли я также использовать его в «блоке» ниже. Является ли «блок» ниже реального блока?weakSelf при установке рамки
avatar.frame = ({
CGRect frame = avatar.frame;
frame.origin.y = CGRectGetMaxY(self.view);
frame;
});
Это стало бы:
__weak typeof(self)weakSelf = self;
avatar.frame = ({
__strong typeof(weakSelf)strongSelf = weakSelf;
CGRect frame = avatar.frame;
frame.origin.y = CGRectGetMaxY(strongSelf.view);
frame;
});
Нет, это не настоящий ObjC блок. Это разрешено расширением компилятора. Вам не нужно слабо себя. –
@MaciejOczko Спасибо, но мне нужно делать это в обычных блоках, не так ли? – yoeriboven
@yoeriboven: Это действительно зависит от того, как используется блок. Выполняется ли блок синхронно или асинхронно? Он хранится в некоторой коллекции для последующего исполнения или нет? Вы хотите, чтобы вы сохраняли сильную ссылку на себя или нет? Нет ответа «один подходит всем». –