favor ver esta cabecera:¿Qué diferencias con las declaraciones de variables estáticas en 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
Y en esta implementación:
// 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
Tengo las siguientes preguntas:
- ¿Hay alguna diferencia fundamental entre las declaraciones (4) y (5) o (6) y (7)?
- ¿Hay alguna diferencia entre la declaración "externa" (4) y la incluida en el alcance de implementación (6)?
- ¿Por qué se puede acceder a (6) y (7) dentro del ámbito de implementación en otro ámbito de implementación (9)?
- ¿Por qué (2) declarado en el encabezado se puede acceder (6) declarado dentro del alcance de implementación?
- ¿Por qué (1) y (3) generan errores
Cannot combine with previous 'extern' declaration specifier
, pero (0) y (2) se compilan sin errores?
Wow, you rock. ¡Gracias! – Stream