有人可以告诉我如何在应用程序运行时确保内存中存在NSArray吗?
感谢......
答案 0 :(得分:2)
您可以在应用程序委托类和应用程序终止发布中保留该对象。
即
在应用程序委托类
中@interface MyAppDelegate : NSObject <UIApplicationDelegate>
{
UIWindow *window;
NSMutableArray *arrayObjects;
}
@property (nonatomic, retain) IBOutlet UIWindow *window;
@property (nonatomic, retain) NSMutableArray *arrayObjects;
现在您可以使用delegate类的实例分配arrayObjects,也可以使用存储在数组中的值。
MyAppDelegate *appDelegate = (MyAppDelegate*)[[UIApplication sharedApplication]delegate];
appDelegate.arrayObjects = [[NSMutableArray alloc] initWithObjects:@"Object 1",@"Object 2",@"Object 3",nil];
这将保留数组中的值。现在,您可以在正确初始化后在应用程序中的任何位置使用数组。
答案 1 :(得分:0)
如果我理解正确,你想将NSArray实例存储到磁盘上?
在这种情况下,请使用[NSKeyedArchiver archiveRootObject:myArray toFile:path]
可以使用以下命令确定存储文件的文件夹:
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
答案 2 :(得分:0)
如果您尝试保留数组,直到应用程序退出,请在App Delegate的-init
方法中分配它,并在App Delegate的-dealloc
方法中释放它。除非您在内存管理中出错并且多次释放该阵列,否则它将在应用程序的整个生命周期中可用。
例如:
@interface MyApp <NSApplicationDelegate>
{
NSArray *myArray;
}
@end
@implementation MyApp
- (id)init
{
if (nil != (self = [super init]))
{
myArray = [[NSArray alloc] init];
}
return self;
}
- (void)dealloc
{
[myArray release], myArray = nil;
[super dealloc];
}
@end