Насколько хорошо использовать extern в Objective C? Он делает кодирование для некоторых деталей легким .. но разве это не портят ориентацию объекта?Использование extern в Objective C
ответ
Вы обнаружите, что extern
широко используется в рамках какао, и один будет трудно нажим, чтобы найти убедительные аргументы, что их ОО «испорчено». Напротив, Cocoa хорошо инкапсулируется и только раскрывает то, что нужно, часто через extern. Определенные глобально константы, безусловно, являются наиболее распространенным использованием, но не обязательно единственным действительным использованием.
IMO, используя extern
, не обязательно «портят» ориентацию объекта. Даже в OO часто используются переменные, доступные из любого места. Использование extern
является наиболее частым обходным решением для отсутствия «переменных класса» (например, объявленных с помощью static
в Java) в Objective-C. Он позволяет расширить область, в которой вы можете ссылаться на символ за пределами единицы компиляции, где он объявлен, по существу, пообещав, что он будет где-то кем-то определен.
Вы также можете комбинировать extern
с __attribute__((visibility("hidden")))
, чтобы создать символ, который можно использовать вне его модуля компиляции, но не вне его узла связи, так сказать. Я использовал это для пользовательской библиотеки и кода структуры, чтобы правильно инкапсулировать внутренние детали более высокого уровня.
Это зависит от того, для чего вы его используете. Это совершенно справедливо для использования в доступе к глобально определенным константам.
Если у вас есть глобальный объект, я бы предложил вместо этого использовать Singleton.
Есть несколько вариантов использования ключевого слова extern
в Objective-C.
Aaron Hillegass предлагает создать глобальные имена уведомлений extern. например:
extern NSString* const XYYourNotification;
Затем определяют фактический NSString*
в вашей реализации
Где я могу найти дополнительную информацию о предложениях Hillegass? Вы знаете URL-адрес? – Joshua
Я впервые увидел его в «Программирование какао для Mac OS X» (Aaron Hillegass). Одна из лучших книг, связанных с какао, которую я читал до сих пор. http://www.bignerdranch.com/book/cocoa®_programming_for_mac®_os_x_3rd_edition –
Зачем мне использовать extern? Могу я просто объявить статическую переменную? Спасибо – aneuryzm
В зависимости от вашей потребности, например, у вас есть страница входа в систему. После входа в систему вы сообщаете на другие страницы приложений.
#import <Foundation/Foundation.h>
extern NSString *const DidLoginNotification;
@interface LoginViewController : NSObject
- (void)login;
@end
// LoginViewController.m
#import "LoginViewController.h"
//define extern const in implementation file only once for the whole process
NSString *const DidLoginNotification =
@"DidLoginNotificationNotified";
@implementation LoginViewController
- (void)login {
// Perform notification
[[NSNotificationCenter defaultCenter];
sendNotificationName: DidLoginNotification
object:nil];
}
Получающая уведомление сторона не должна знать значение const.
- 1. Использование extern в C++
- 2. Objective c ошибка с extern
- 3. Практическое использование extern в C?
- 4. Objective-C extern и typedef undefined symbols
- 5. Использование dlsym в C++ без extern «C»
- 6. Использование c99 в `extern 'C++` C блоков `
- 7. Использование переменной extern в файлах c
- 8. Использование ключевого слова extern в C++
- 9. Использование extern для экземпляра класса в C++
- 10. Использование C++ в Objective C++?
- 11. Использование ключевого слова Extern
- 12. Использование extern & inline
- 13. переменные extern в статической библиотеке, используя Objective-C
- 14. Использование «extern» Ключевое слово
- 15. Использование (уродливый) C-код в C++ с extern «C»
- 16. Использование глобальных переменных в Objective-C
- 17. Использование блоков Objective-C
- 18. Использование Objective-C Блоки
- 19. Objective-C использование указателей
- 20. Использование памяти Objective-C
- 21. Использование Objective C enum в Swift в Objective C
- 22. Objective C использование указателя
- 23. Использование R.Framework в Objective-C
- 24. Использование «id» в Objective-C?
- 25. Использование (id) в Objective-C
- 26. Использование перечислений в Objective C
- 27. Использование * в Objective C Синтаксис
- 28. Использование перечисления в Objective-C?
- 29. Использование переменных в Objective-C
- 30. Использование рекурсии в Objective-C
Hm .. Но это уменьшает читаемость кода, если использование в документах не документировано в большей степени. –
Есть ли способ использовать это с объявлением класса? (т. е. http://stackoverflow.com/questions/22798660/extern-with-class-in-objective-c) – Senseful
Также рассмотрите FOUNDATION_EXPORT, поскольку он также работает с кодом C++. http://stackoverflow.com/a/10953284/142358 –