Есть ли причина, по которой я не должен просто определять #define NSFM [NSFileManager defaultManager] вместо того, чтобы записывать его каждый раз? - PullRequest
4 голосов
/ 21 января 2010

Есть встроенный ярлык NSApp, есть ли причина, по которой я не должен добавлять его для NSFileManager?

#define NSFM [NSFileManager defaultManager]

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

NSFileManager *fm = [NSFileManager defaultManager] 

Ответы [ 3 ]

5 голосов
/ 22 января 2010

Почему бы вам просто не использовать локальную переменную?

NSFileManager *fm = [NSFileManager defaultManager];
// use fm...

или еще лучше, введите файловый менеджер в качестве аргумента метода:

- (void)myMethod {
  //using [NSFileManager defaultManager]
}

становится

- (void)myMethodWithFileManager:(NSFileManager*)fm {
 //usin fm
}

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

Наконец, Cocoa и Objective-C обычно предпочитают явный код короткому коду. Философия в основном заключается в том, что использование более многословных имен облегчает чтение кода (и, следовательно, его поддержку). Эта философия идет вплоть до стиля селектора Objective-C с чередованием именованных аргументов. Если вы действительно не справитесь с дополнительной типизацией (и завершение кода XCode не будет работать для вас), придерживайтесь существующих имен. Когда в Риме и все такое ...

3 голосов
/ 21 января 2010

Если это делает ваш код чище, я все для этого. Просто помните, что любые другие разработчики, которые должны читать ваш код, не будут немедленно знать, что представляют NSFM или fm.

Я бы предложил немного более описательное имя: NSFileMgr. Большинству разработчиков Какао это сделало бы назначение переменной более понятным без необходимости ее поиска.

ОБНОВЛЕНИЕ: См. Ответ Барри Уорка о некоторых очень хороших моментах в отношении тестирования.

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

Я бы использовал локальную переменную каждый раз, потому что использование defaultManager не безопасно для потоков.Если в какой-то момент вы начнете использовать потоки в своем приложении, вы можете столкнуться с трудностями в поиске ошибок и не будете знать, почему, пока не запустите этот бит документации .

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