如果将变量定义为静态变量,它会在不同的实例中保留其值。你可以在你的课堂上这样做:
@interface FirstViewController : UIViewController
- (NSInteger)sharedValue;
- (void)setSharedValue:(NSInteger)value;
@end
@implementation FirstViewController
static NSInteger sharedValue = 0;
- (NSInteger)sharedValue
{
return sharedValue;
}
- (void)setSharedValue:(NSInteger)value
{
sharedValue = value;
}
@end
现在,您创建的任何 FirstViewController 实例都将共享 sharedValue 的相同副本,如果您将其设置在一个实例上,然后从另一个实例中获取它,它将按照您想要的方式工作。相同的过程适用于字符串等,但如果您不使用 ARC,请注意保留和释放 sharedValue。
比在类上创建多个静态值更好的方法是创建一个共享类,您可以在该类上设置和获取多个属性。这些共享类有时被称为“单例”,因为它们是具有单个实例的类。
您可以看到 Apple 使用单例的许多地方,例如 [UIApplication sharedApplication]、[NSNotificationCenter defaultCenter]、[NSUserDefaults standardUserDefaults] - 这些都是在整个应用程序中重用单个实例的类的示例。
要创建单例,请创建一个类型为 NSObject 的新类,如下所示。然后,您可以添加您想要的任何属性,并通过 sharedInstance 在应用程序的任何位置访问它们:
@interface MyObject : NSObject
@property (nonatomic, assign) NSInteger someInteger;
@property (nonatomic, strong) NSString *someString;
+ (MyObject *)sharedInstance;
@end
@implementation MyObject
@synthesize someInteger, someString;
+ (MyObject *)sharedInstance
{
static MyObject *sharedInstance = nil;
if (sharedInstance == nil)
{
sharedInstance = [[self alloc] init];
}
return sharedInstance;
}
@end
您现在可以通过说在应用程序的任何位置访问共享属性
[MyObject sharedInstance].someInteger = 5;
...
NSInteger value = [MyObject sharedInstance].someInteger;
这绝对是在您的应用程序中存储全局数据的最佳方式。