¿Qué tan bueno es usar extern en el objetivo C? Hace que la codificación de algunas partes sea fácil ... ¿pero no daña la orientación del objeto?Uso de extern en el objetivo C
Respuesta
usted encontrará que extern
se utiliza ampliamente en los marcos de cacao, y uno estaría en apuros para encontrar un argumento convincente de que su OO está "malcriado". Por el contrario, Cocoa está bien encapsulado y solo expone lo que debe, a menudo de forma externa. Las constantes definidas globalmente son ciertamente el uso más común, pero no necesariamente el único uso válido.
IMO, utilizando extern
no necesariamente "estropea" la orientación del objeto. Incluso en OO, es frecuente usar variables accesibles desde cualquier lugar. El uso de extern
es la solución más frecuente para la falta de "variables de clase" (como las declaradas con static
en Java) en Objective-C. Le permite ampliar el alcance en el que puede hacer referencia a un símbolo más allá de la unidad de compilación donde se declara, esencialmente al prometer que alguien lo definirá en alguna parte.
También puede combinar extern
con __attribute__((visibility("hidden")))
para crear un símbolo que se pueda usar fuera de su unidad de compilación, pero no fuera de su unidad de enlace, por así decirlo. Lo he usado para código de biblioteca y marco personalizado para encapsular adecuadamente los detalles internos de nivel superior.
Depende de para qué lo use. Es perfectamente válido para usarlo para acceder a constantes definidas globalmente.
Si tiene un objeto global, sin embargo, le sugiero que use Singleton.
Hay algunos casos de uso para la palabra clave extern
en Objective-C.
Aaron Hillegass sugiere crear nombres de notificaciones globales extern. por ejemplo:
extern NSString* const XYYourNotification;
A continuación se define el actual NSString*
en su aplicación
¿Dónde puedo encontrar más información sobre la sugerencia de Hillegass? ¿Conoces la URL? – Joshua
Lo vi por primera vez en "Cocoa Programming for Mac OS X" (Aaron Hillegass). Uno de los mejores libros relacionados con el cacao que leí hasta ahora. http://www.bignerdranch.com/book/cocoa®_programming_for_mac®_os_x_3rd_edition –
¿Por qué necesito usar extern? ¿No puedo simplemente declarar una variable estática? Gracias – aneuryzm
Depende de su necesidad, por ejemplo, tiene la página de inicio de sesión. Después de iniciar sesión, está notificando a otras páginas en las aplicaciones.
#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];
}
La parte que recibe la notificación no necesita conocer el valor de la const.
- 1. Objetivo-C uso de punteros
- 2. enumeración extern en C++
- 3. Objetivo C - ¿Cómo uso el método initWithCoder?
- 4. Envolver objeto de C++ en extern "C"
- 5. ¿Cómo funciona extern en C++?
- 6. Cuándo usar extern "C"?
- 7. static vs extern "C"/"C++"
- 8. Ajuste del objetivo C en el objetivo C++/C++
- 9. ¿Extern "C" tiene algún efecto en C?
- 10. Cuándo usar extern "C" en C++?
- 11. C: ¿Cuál es el uso de 'extern' en los archivos de encabezado?
- 12. extern en una función estática en C++
- 13. Variable de cadena estática en el Objetivo C en iphone
- 14. Selectores en el objetivo C
- 15. Caret en el objetivo C
- 16. pi en el objetivo C
- 17. constructor en el objetivo c
- 18. __OBJC__ en el objetivo C
- 19. epub en el objetivo c
- 20. Cuándo usar extern "C" en palabras simples?
- 21. Propósito del modificador extern del constructor C#
- 22. Compilar C# en el objetivo-C
- 23. Constante en objetivo-c
- 24. "extern const" vs "extern" only
- 25. Pregunta de conversión C++ a Java sobre extern "C"
- 26. Convención de nomenclatura en el objetivo C/C, comience con "_"?
- 27. Cómo usar la variable estática (BOOL) en el Objetivo C
- 28. El objetivo principal de eventos en C#
- 29. Métodos de utilidad en el objetivo-c
- 30. Devolución de errores en el objetivo-c
Hm .. Pero disminuye la legibilidad del código si el uso no está documentado en mayor medida. –
¿Hay alguna manera de usar esto con una declaración de clase? (es decir, http://stackoverflow.com/questions/22798660/extern-with-class-in-objective-c) – Senseful
También considere FOUNDATION_EXPORT ya que también funciona con código C++. http://stackoverflow.com/a/10953284/142358 –