Разъяснение блочных документов 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);

Есть ли у вас какие-либо рекомендации относительно того, когда кто-то может захотеть сделать то или иное?

Если общепринятым является использование "по значению переменные, кажется, что это приведет к большому количеству дополнительного кода для дополнительных объявлений переменных?В ситуации, когда в игру вступают вложенные блоки, может показаться, что было бы более целесообразно избегать объявления блоков друг в друге, поскольку в конечном итоге можно получить попурри из непреднамеренно удерживаемых объектов?

Ответы на вопрос(2)

Ваш ответ на вопрос