如果App正在运行,如何在内存中保留NSArray

时间:2010-06-29 12:40:42

标签: iphone objective-c

有人可以告诉我如何在应用程序运行时确保内存中存在NSArray吗?

感谢......

3 个答案:

答案 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