A partir de Xcode 8, puede definir propiedades de clase en Obj-C. Esto se ha agregado para interoperar con las propiedades estáticas de Swift.
Objective-C ahora admite propiedades de clase, que interoperan con las propiedades de tipo Swift. Se declaran como: @property (class) NSString * someStringProperty ;. Nunca se sintetizan. (23891898)
Aquí hay un ejemplo
@interface YourClass : NSObject
@property (class, nonatomic, assign) NSInteger currentId;
@end
@implementation YourClass
static NSInteger _currentId = 0;
+ (NSInteger)currentId {
return _currentId;
}
+ (void)setCurrentId:(NSInteger)newValue {
_currentId = newValue;
}
@end
Entonces puedes acceder de esta manera:
YourClass.currentId = 1;
val = YourClass.currentId;
Aquí hay una publicación explicativa muy interesante que utilicé como referencia para editar esta vieja respuesta.
Respuesta 2011: (no uses esto, es terrible)
Si realmente no quiere declarar una variable global, hay otra opción, quizás no muy ortodoxa :-), pero funciona ... Puede declarar un método "get & set" como este, con una variable estática dentro:
+ (NSString*)testHolder:(NSString*)_test {
static NSString *test;
if(_test != nil) {
if(test != nil)
[test release];
test = [_test retain];
}
// if(test == nil)
// test = @"Initialize the var here if you need to";
return test;
}
Entonces, si necesita obtener el valor, simplemente llame:
NSString *testVal = [MyClass testHolder:nil]
Y luego, cuando quieras configurarlo:
[MyClass testHolder:testVal]
En el caso de que desee poder establecer este pseudo-static-var en nil, puede declarar testHolder
así:
+ (NSString*)testHolderSet:(BOOL)shouldSet newValue:(NSString*)_test {
static NSString *test;
if(shouldSet) {
if(test != nil)
[test release];
test = [_test retain];
}
return test;
}
Y dos métodos útiles:
+ (NSString*)test {
return [MyClass testHolderSet:NO newValue:nil];
}
+ (void)setTest:(NSString*)_test {
[MyClass testHolderSet:YES newValue:_test];
}
¡Espero eso ayude! Buena suerte.