Лучшая практика для повторно используемой переменной? - PullRequest
2 голосов
/ 19 июня 2011

Я пытаюсь понять точку, я знаю, что в этом случае она может быть незначительной.

Когда я звоню, скажем:

float w = object.frame.size.width;

Программа "вычисляет", что каждый раз, когда я его вызываю, или сохраняет эти данные при создании объекта.

Я имею в виду разницу (в использовании памяти) между:

float w = object.frame.size.width;
float g = object.frame.size.width;
float s = object.frame.size.width;

А:

float newVar = object.frame.size.width;
float w = newVar;
float g = newVar;
float s = newVar;

Спасибо

Шани

1 Ответ

2 голосов
/ 19 июня 2011

object.frame.size.width может (и в этом случае делает) только читать и возвращать некоторые свойства c struct, но имейте в виду, что это могут быть настоящие вызовы метода Objective-C, такие как object.color.

Давайте использовать другой пример, где это не так очевидно.Вы можете вызвать object.description для каждого объекта, чтобы получить строковое описание этого объекта.Это точно так же, как вызов метода [описание объекта].Знаете ли вы, что нужно сделать, чтобы получить описание?Это зависит от разработчика этого метода, но ничто не мешает им делать что-то дорогое, разрушительное или иным образом глупое.

object.doSomethingVeryComplicated сработает.Это не то, как вы должны использовать точечную нотацию, и вы никогда не должны делать что-то очень сложное в ваших методах получения и установки, и они никогда не должны делать что-либо для вашего объекта (кроме ленивой инициализации), нонет никаких жестких барьеров, чтобы помешать вам делать подобные вещи.Это "единственное" соглашение.Вы можете даже теоретически сделать object.tellMeYourColorAndThenGiveYourselfANewRandomColor.Теперь, очевидно, будет три разных ответа для вашего первого и только один ответ для вашего второго примера.

Это зависит от разработчика методов получения и установки (которые являются единственными , которые должны быть вызывается через точечную нотацию), чтобы гарантировать, что такого рода легкомыслие не произойдет, но ничто не остановит вызывающую сторону метода для вызова деструктивных методов, которые не были предназначены для такого использования через точечную нотацию.Точечная нотация - это инструмент для вас, писателя, для указания простых действий get / set для читателей вашего кода (включая вас).

Итак, я не думаю, что компилятор может оптимизировать / абстрагировать один пример впример дваНо я не уверен, может быть, он действительно так глубоко анализирует код, что знает, когда это возможно, а когда нет.Или, возможно, это возможно, когда это действительно только доступ к структуре ac, как в вашем примере, но не тогда, когда это реальный вызов метода.В любом случае, вы всегда знаете, что это такое, и каковы последствия?Я бы пошел для ясности в моем коде вместо краткости.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...