Это обычное явление при использовании блоков.Я предполагаю, что вы обращаетесь к свойству с блоком с помощью чего-то вроде self.wordDispalyed
.
Поскольку блоки могут выполняться асинхронно, они содержат сильную ссылку на объекты внутри них.Это так, что если они запускаются через некоторое время после того, как вы освободили объект, по крайней мере, блок все еще может отправлять ему сообщения.
В вашем случае вы ссылаетесь на свойство внутри блока.Таким образом, блок сохраняет объект, в данном случае self
.Но ваш объект (self
) также сохраняет блок, так как он должен его запустить.Итак, у вас есть круговая ссылка.Блок сохраняет объект, а объект сохраняет блок.Это может вызвать у вас проблемы - и компилятор предупреждает вас об этом.
Чтобы обойти это, вам нужно создать локальную переменную, которая будет хорошо сохраняться блоком, и использовать ее дляссылка на имущество.Это просто, как написать:
__weak TheObject *blockSelf = self;
И затем в вашем блоке вы имеете дело со свойством как:
blockSelf.wordDisplayed …