Циклические ссылки
Если в главном потоке нужно использовать блок, который выполняется в другом потоке, а в блоке необходимо обратиться к объекту этого класса (например, self), то может возникнуть циклическая ссылка на self, и он никогда не уничтожится из памяти.
Получится, что self → имеет strong-ссылку на блок. А блок → strong-ссылку на self. И, так как никто из них не потеряет ссылку на себя, они не уничтожатся при деаллоке.
Чтобы этого не произошло, для использование self в блоке, создается слабая ссылка на self и передается в блок:
__weak typeof(self) wself = self; [[SoundProvider sharedInstance] makeSome:(NSString *)noise completionHandler:^(id spectrum, NSError *error) { if (!error) { wself.loud = spectrum; } }];
Теперь self не имеет лишнего родителя, и будет уничтожена при обычном деаллоке.
См. также Working with Blocks в документации Какао.