Si prega di guardare in questa intestazione:Come diverse dichiarazioni di variabili statiche in Objective-C?
// Test.h
@interface Test : NSObject @end
extern id A; // (0)
//extern static id B; // (1) Uncomment to get a compiling error
extern id C; // (2)
//extern static id D; // (3) Uncomment to get a compiling error
E in questa implementazione:
// Test.m
#import "Test.h"
id A = @"A"; // (4)
static id B = @"B"; // (5)
@implementation Test
id C = @"C"; // (6)
static id D = @"D"; // (7)
@end
// Still Test.m
@interface Test2 : NSObject @end
@implementation Test2 : NSObject
+ (void)initialize {
NSLog(@"%@ %@", A, B); // (8)
NSLog(@"%@ %@", C, D); // (9)
}
@end
Ho le seguenti domande:
- v'è alcuna differenza fondamentale tra le dichiarazioni (4) e (5) o (6) e (7)?
- C'è qualche differenza tra la dichiarazione "esterna" (4) e l'ambito di applicazione (6)?
- Perché è possibile accedere a (6) e (7) dichiarati nell'ambito dell'implementazione in un altro ambito di implementazione (9)?
- Perché (2) dichiarato nell'intestazione può accedere (6) dichiarato nell'ambito di implementazione?
- Perché (1) e (3) generare errori
Cannot combine with previous 'extern' declaration specifier
, ma (0) e (2) sono compilati senza errori?
Wow, è rock. Grazie! – Stream