Не вызовет ли это цикл удержания? (obj-c, пример кода)

SomeViewController *newController = [SomeViewController new];
[newController setSomeBlock:^{
   [self.someProperty doSomething];
}];
[self presentViewController:newController animated:YES completion:nil];

SomeViewController имеет someBlock в качестве свойства, родительский контроллер представления self представляет newController, а someBlock newController обращается к self.someProperty родительского контроллера представления.

Не вызовет ли это цикл удержания?


person Jiho Kang    schedule 26.08.2014    source источник


Ответы (1)


НЕТ, это не создаст цикл сохранения, потому что блок, в котором вы используете себя, сохраняется SomeViewController, а не самим классом контроллера собственного/текущего представления.

Когда вы выполняете этот код, блок someviewcontroller сохранит себя во время своей области действия, и когда вы вытащите этот someviewcontroller или этот блок будет освобожден, он освободит себя обратно.

Цикл сохранения возникает только тогда, когда два объекта сохраняют друг друга, например, в этом случае:

SomeViewController *newController = [SomeViewController new];
[newController setSomeBlock:^{
    [newController doSomething];
}];
[self presentViewController:newController animated:YES completion:nil];

Вы можете дополнительно проверить это, добавив оператор NSLog к методу Dealloc в SomeViewController и текущем контроллере представления.

Для получения дополнительной информации см. Документы Apple

person Asif Mujteba    schedule 26.08.2014