Разъяснение блочных документов Apple?
Я работаю над некоторыми проблемами с циклом сохранения блоков / ARC и пытаюсь разобраться в нюансах. Любое руководство приветствуется.
Яблоко'документация на "Блоки и Переменные " (http://developer.apple.com/library/ios/#documentation/cocoa/Conceptual/Blocks/Articles/bxVariables.html) говорит следующее:
Если вы используете блок в реализации метода, правила для управления памятью переменных экземпляра объекта являются более тонкими:
Если вы обращаетесь к переменной экземпляра по ссылке, self сохраняется; Если вы обращаетесь к переменной экземпляра по значению, переменная сохраняется. Следующие примеры иллюстрируют две разные ситуации:
dispatch_async(queue, ^{
// instanceVariable is used by reference, self is retained
doSomethingWithObject(instanceVariable);
});
id localVariable = instanceVariable;
dispatch_async(queue, ^{
// localVariable is used by value, localVariable is retained (not self)
doSomethingWithObject(localVariable);
});
Я нахожу это объяснение запутанным.
Это уместное использование "по значению "/"по ссылке" терминология? Предполагая, что эти переменные имеют одинаковый тип (id), кажется, что отличительной характеристикой между ними является их область действия.Я не вижу, как на себя ссылаются впо ссылке" пример? Если бы использовался метод доступа (например, ниже), я мог бы видеть, что себя удерживают.
doSomethingWithObject (self.instanceVariable);
Есть ли у вас какие-либо рекомендации относительно того, когда кто-то может захотеть сделать то или иное?
Если общепринятым является использование "по значению переменные, кажется, что это приведет к большому количеству дополнительного кода для дополнительных объявлений переменных?В ситуации, когда в игру вступают вложенные блоки, может показаться, что было бы более целесообразно избегать объявления блоков друг в друге, поскольку в конечном итоге можно получить попурри из непреднамеренно удерживаемых объектов?