Ошибка памяти для глобальной переменной и переменной класса на iPhone / iPad / iPod touch - PullRequest
0 голосов
/ 12 июля 2010

Когда мы должны использовать глобальную переменную, а когда переменную класса и почему?

Я надеюсь, что вы поделитесь своим опытом и идеями с нами, которые являются новичками в этой платформе.

Пример:

Позвольте, мне нужно отследить отметку времени и положение событий касания (например, касание начала, конца) на слое. Я могу отследить это, используя глобальную переменную или переменную класса того класса, который реализует сенсорное событие. Что мне делать?

С уважением,

-Sadat

Ответы [ 2 ]

2 голосов
/ 12 июля 2010

Это не проблема, специфичная для Objective C или семейства устройств iPad.

Переменные должны иметь минимальную «видимость» и «продолжительность», в которой они нуждаются, и не более.

Вы должны были бы придумать несколько очень убедительных причин для того, чтобы попытаться получить глобальную переменную через наши процессы проверки кода.Их почти всегда можно заменить на что-то более подходящее.


В ответ на ваш комментарий:

Я не знаю, как переменная global / classвлияет на память.

Здесь есть хороший фрагмент над здесь , который подробно описывает, как делать переменные уровня класса.Это обычные переменные в области видимости файла C, поэтому они не видны вне файла, но вы получаете только одну для класса, а не одну для каждого объекта, который вы создаете.

В этом смысле они имеют преимущества:глобальный (минимальное хранилище и значение по-прежнему доступно для чтения) без недостатков (загрязняющих глобальное пространство имен и позволяющих коду вне класса изменять его).

И, если это не такне нужно читать вне файла, просто не предоставляйте метод initCount.

1 голос
/ 12 июля 2010

Это довольно простой ответ, но вообще не используйте глобальные переменные - придерживайтесь методов класса и ожидаемой инкапсуляции. Что-нибудь еще, и вы будете сражаться с библиотеками какао от заката до рассвета. Если вы будете следовать их шаблонам, которые включают методы класса, инкапсуляцию, делегирование и т. Д. - вы добьетесь огромных успехов с относительно небольшими усилиями.

Единственное место, где я мог бы назвать что-то "глобальной переменной" в моих усилиях, это константы всего проекта - поэтому вообще не переменные, но иногда есть хорошая потребность в константе в вашем проекте (идентификаторы TableViewCell ум)

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