iPhone SDK: скорость против мем-следа - PullRequest
0 голосов
/ 08 октября 2009

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

((MyAppDelegate *) [UIApplication sharedApplication].delegate).soundEffects

Игнорирование проблемы с читабельностью (поскольку никто из них никогда не увидит эти src) изменит ли это что-нибудь, если в init контроллера у меня получится указатель на объект делегата приложения, и я просто получу к нему доступ так:

...
MyAppDelegate *foo = [UIApplication sharedApplication].delegate
...
foo.soundEffects ...

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

Что лучше?

спасибо

1 Ответ

0 голосов
/ 08 октября 2009

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

В этом случае предлагаемое вами изменение, безусловно, является шагом в правильном направлении, поэтому, если хотите, сделайте это постепенное изменение.

Если вы чувствуете смелость и хотите сделать еще один шаг в правильном направлении, вы можете добавить переменную-член soundEffects к каждому нужному контроллеру, присвоить ей свойство с помощью @property (nonatomic, retain) и установить его свойство после создания каждого контроллера (в приложении делегата приложения: didFinishLaunchingWithOptions: и везде, где вы можете создавать эти контроллеры). Таким образом, вашим контроллерам даже не нужно знать, что делегат приложения существует. Эта «слабая связь» является достоинством объектно-ориентированного проектирования, которое минимизирует зависимости между вашими объектами, облегчая их обслуживание.

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