Quanto è buono usare extern nell'obiettivo C? Fa sì che la codifica di alcune parti sia facile ... ma non rovina l'orientamento dell'oggetto?Uso di extern nell'obiettivo C
risposta
vi accorgerete che la extern
è usato ampiamente nei quadri di cacao, e uno sarebbe fatica a trovare un argomento convincente che la loro OO è "viziata". Al contrario, Cocoa è ben incapsulato e espone solo ciò che deve, spesso tramite extern. Le costanti definite globalmente sono sicuramente l'uso più comune, ma non necessariamente l'unico uso valido.
IMO, utilizzando extern
non necessariamente "rovina" l'orientamento dell'oggetto. Anche in OO, è frequente l'uso di variabili accessibili da qualsiasi luogo. L'utilizzo di extern
rappresenta la soluzione più frequente per la mancanza di "variabili di classe" (come quelle dichiarate con static
in Java) in Objective-C. Ti permette di espandere l'ambito in cui puoi fare riferimento a un simbolo oltre l'unità di compilazione in cui è dichiarato, essenzialmente promettendo che verrà definito da qualche parte da qualcuno.
È inoltre possibile combinare extern
con __attribute__((visibility("hidden")))
per creare un simbolo che può essere utilizzato all'esterno dell'unità di compilazione, ma non al di fuori dell'unità di collegamento, per così dire. Ho usato questo per la libreria personalizzata e il codice framework per incapsulare correttamente i dettagli interni di livello superiore.
Dipende da cosa lo usi. È perfettamente valido utilizzarlo per accedere a costanti definite globalmente.
Se si dispone di un oggetto globale, tuttavia, suggerirei di utilizzare invece Singleton.
Esistono alcuni casi di utilizzo per la parola chiave extern
in Objective-C.
Aaron Hillegass suggerisce di creare nomi di notifiche globali extern. esempio:
extern NSString* const XYYourNotification;
quindi definire l'attuale NSString*
nell'implementazione
Dove posso trovare ulteriori informazioni sul suggerimento di Hillegass? Conosci l'URL? – Joshua
L'ho visto per la prima volta in "Cocoa Programming per Mac OS X" (Aaron Hillegass). Uno dei migliori libri correlati al cacao che ho letto finora. http://www.bignerdranch.com/book/cocoa®_programming_for_mac®_os_x_3rd_edition –
Perché devo usare extern? Non posso semplicemente dichiarare una variabile statica? Grazie – aneuryzm
A seconda delle esigenze, ad esempio la pagina di accesso. Dopo aver effettuato l'accesso, si sta notificando ad altre pagine nelle applicazioni.
#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 che riceve la notifica non ha bisogno di conoscere il valore del const.
- 1. L'uso di extern in C++
- 2. statico vs extern "C"/"C++"
- 3. enum extern in C++
- 4. Come funziona extern in C++?
- 5. extern "C" static void * Funzione
- 6. Quando utilizzare extern "C" in C++?
- 7. Programma di compilazione contenente extern "C"
- 8. Collegamento "C" extern all'interno dello spazio dei nomi C++?
- 9. C++: funzioni Extern C all'interno di uno spazio dei nomi
- 10. C: Qual è l'uso di "extern" nei file di intestazione?
- 11. extern "C" Errore # 2040: atteso un identificatore
- 12. Impossibile utilizzare cout/endl quando extern "C"
- 13. Quando utilizzare extern "C" in parole semplici?
- 14. extern su una funzione statica in C++
- 15. solo "extern const" vs "extern" solo
- 16. riferimento definito utilizzando extern
- 17. Possiamo usare "C" extern nel file C senza #ifdef __cplusplus?
- 18. Extern Struct?
- 19. Qual è il comportamento specificato di includere un'intestazione C standard, in codice C++, all'interno di una specifica di collegamento (extern "C", extern "C++")?
- 20. Qual è la differenza tra `extern int (x) []` e `extern int x []` in C?
- 21. extern con definizione globale di variabile in c
- 22. 'E extern "C" `una parte del tipo di una funzione?
- 23. "FOUNDATION_EXPORT" vs "extern"
- 24. Obiettivo-C uso di puntatori
- 25. Uso di Tk con C
- 26. Funzione extern durante il collegamento?
- 27. dov'è la definizione di extern char ** environ?
- 28. Uso rapido c struct
- 29. Uso classe C++ typedef
- 30. Come dichiarare extern typedef struct?
Hm .. Ma riduce la leggibilità del codice se l'uso non è documentato in misura maggiore. –
C'è un modo per usarlo con una dichiarazione di classe? (ad esempio http://stackoverflow.com/questions/22798660/extern-with-class-in-objective-c) – Senseful
Considera anche FOUNDATION_EXPORT poiché funziona anche con il codice C++. http://stackoverflow.com/a/10953284/142358 –