Доступ к переменным по значению или ссылке

В приведенном ниже примере я не понимаю, почему доступ к localVariable осуществляется по значению в doSomethingWithObject . Что делает это преобразование? Как отличить доступ к переменной по значению от доступа к ней по ссылке? Я хотел бы увидеть больше связанных примеров, если это возможно.

Ниже приводится отрывок из Темы программирования блоков Apple и показано, как переменные экземпляра сохраняются в блоках.

Если вы используете блок внутри реализация метода, правила для управления памятью объекта переменные экземпляра более тонкие:

  • Если вы обращаетесь к переменной экземпляра по ссылке, self сохраняется;
  • Если вы обращаетесь к переменной экземпляра по значению, переменная сохраняется.

Следующие примеры иллюстрируют две разные ситуации:

 dispatch_async (queue, ^ {
  // instanceVariable используется по ссылке, self сохраняется
  doSomethingWithObject (instanceVariable);
 });

id localVariable = instanceVariable;
dispatch_async (очередь, ^ {
  // localVariable используется по значению, localVariable сохраняется (не self)
  doSomethingWithObject (localVariable);
 });
 

5
задан Pablo 13 September 2011 в 14:08
поделиться