views:

52

answers:

3

Hi all,

Can anybody tell me how to make sure an NSArray exist in memory as long as the app is running?

Thanks......

A: 

If I understand you correctly you want to store a NSArray instance to disk?

In that case use [NSKeyedArchiver archiveRootObject:myArray toFile:path]

The folder to store the file at can be determined with:

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
Diederik Hoogenboom
A: 

If you're trying to preserve the array until the application exits, allocate it in your App Delegate's -init method and release it in the App Delegate's -dealloc method. Unless you make a mistake in your memory management and release the array too many times, it will be available for the entire lifecycle of the application.

For example:

@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
Paul
+2  A: 

You can retain the object in application delegate class and on application terminate release.

i.e

in application delegate class

@interface MyAppDelegate : NSObject <UIApplicationDelegate> 
{
    UIWindow *window;
    NSMutableArray *arrayObjects;
}
@property (nonatomic, retain) IBOutlet UIWindow *window;
@property (nonatomic, retain) NSMutableArray *arrayObjects;

Now you can allocate the arrayObjects using the instance of delegate class and you can also use the value stored in arrays.

MyAppDelegate *appDelegate = (MyAppDelegate*)[[UIApplication sharedApplication]delegate];
appDelegate.arrayObjects = [[NSMutableArray alloc] initWithObjects:@"Object 1",@"Object 2",@"Object 3",nil];

This will preserve value in your array.Now You can use array any where in application after proper initialization.

Jim