以代码实例总结iOS应用开发中数据的存储方式


本文向大家介绍以代码实例总结iOS应用开发中数据的存储方式,包括了以代码实例总结iOS应用开发中数据的存储方式的使用技巧和注意事项,需要的朋友参考一下

ios数据存储包括以下几种存储机制:

  • 属性列表
  • 对象归档
  • SQLite3
  • CoreData
  • AppSettings
  • 普通文件存储

1、属性列表


//  

//  Persistence1ViewController.h  

//  Persistence1  

//  

//  Created by liu lavy on 11-10-3.  

//  Copyright 2011 __MyCompanyName__. All rights reserved.  

//  

  

#import <UIKit/UIKit.h>  

#define kFilename @"data.plist"  

  

@interface Persistence1ViewController : UIViewController {  

    UITextField *filed1;  

    UITextField *field2;  

    UITextField *field3;  

    UITextField *field4;  

}  

@property (nonatomic, retain) IBOutlet UITextField *field1;  

@property (nonatomic, retain) IBOutlet UITextField *field2;  

@property (nonatomic, retain) IBOutlet UITextField *field3;  

@property (nonatomic, retain) IBOutlet UITextField *field4;  

  

- (NSString *)dataFilePath;  

- (void)applicationWillResignActive:(NSNotification *)notification;  

  

@end  



//  

//  Persistence1ViewController.m  

//  Persistence1  

//  

//  Created by liu lavy on 11-10-3.  

//  Copyright 2011 __MyCompanyName__. All rights reserved.  

//  

  

#import "Persistence1ViewController.h"  

  

@implementation Persistence1ViewController  

@synthesize field1;  

@synthesize field2;  

@synthesize field3;  

@synthesize field4;  

  

//数据文件的完整路径  

- (NSString *)dataFilePath {  

    //检索Documents目录路径。第二个参数表示将搜索限制在我们的应用程序沙盒中  

    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);  

    //每个应用程序只有一个Documents目录  

    NSString *documentsDirectory = [paths objectAtIndex:0];  

    //创建文件名  

    return [documentsDirectory stringByAppendingPathComponent:kFilename];  

}  

  

//应用程序退出时,将数据保存到属性列表文件  

- (void)applicationWillResignActive:(NSNotification *)notification {  

    NSMutableArray *array = [[NSMutableArray alloc] init];  

    [array addObject: field1.text];  

    [array addObject: field2.text];  

    [array addObject: field3.text];  

    [array addObject: field4.text];  

    [array writeToFile:[self dataFilePath] atomically:YES];  

    [array release];  

}  

  

/* 

// The designated initializer. Override to perform setup that is required before the view is loaded. 

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { 

    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; 

    if (self) { 

        // Custom initialization 

    } 

    return self; 

} 

*/  

  

/* 

// Implement loadView to create a view hierarchy programmatically, without using a nib. 

- (void)loadView { 

} 

*/  

  

  

  

// Implement viewDidLoad to do additional setup after loading the view, typically from a nib.  

- (void)viewDidLoad {  

    [super viewDidLoad];  

    NSString *filePath = [self dataFilePath];  

    //检查数据文件是否存在  

    if([[NSFileManager defaultManager] fileExistsAtPath:filePath]) {  

        NSArray *array = [[NSArray alloc] initWithContentsOfFile:filePath];  

        field1.text = [array objectAtIndex:0];  

        field2.text = [array objectAtIndex:1];  

        field3.text = [array objectAtIndex:2];  

        field4.text = [array objectAtIndex:3];  

        [array release];  

    }  

    UIApplication *app = [UIApplication sharedApplication];  

    [[NSNotificationCenter defaultCenter] addObserver:self  

                                            selector:@selector(applicationWillResignActive:)  

                                            name:UIApplicationWillResignActiveNotification  

                                            object:app];  

    [super viewDidLoad];  

}  

  

  

/* 

// Override to allow orientations other than the default portrait orientation. 

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { 

    // Return YES for supported orientations 

    return (interfaceOrientation == UIInterfaceOrientationPortrait); 

} 

*/  

  

- (void)didReceiveMemoryWarning {  

    // Releases the view if it doesn't have a superview.  

    [super didReceiveMemoryWarning];  

      

    // Release any cached data, images, etc that aren't in use.  

}  

  

- (void)viewDidUnload {  

    self.field1 = nil;  

    self.field2 = nil;  

    self.field3 = nil;  

    self.field4 = nil;  

    [super viewDidUnload];  

}  

  

  

- (void)dealloc {  

    [field1 release];  

    [field2 release];  

    [field3 release];  

    [field4 release];  

    [super dealloc];  

}  

  

@end  

2、对象归档


//  

//  Fourlines.h  

//  Persistence2  

//  

//  Created by liu lavy on 11-10-3.  

//  Copyright 2011 __MyCompanyName__. All rights reserved.  

//  

  

#import <Foundation/Foundation.h>  

  

@interface Fourlines : NSObject <NSCoding, NSCopying> {  

    NSString *field1;  

    NSString *field2;  

    NSString *field3;  

    NSString *field4;  

}  

@property (nonatomic, retain) NSString *field1;  

@property (nonatomic, retain) NSString *field2;  

@property (nonatomic, retain) NSString *field3;  

@property (nonatomic, retain) NSString *field4;  

 

@end 



//  

//  Fourlines.m  

//  Persistence2  

//  

//  Created by liu lavy on 11-10-3.  

//  Copyright 2011 __MyCompanyName__. All rights reserved.  

//  

  

#import "Fourlines.h"  

  

#define kField1Key @"Field1"  

#define kField2Key @"Field2"  

#define kField3Key @"Field3"  

#define kField4Key @"Field4"  

  

@implementation Fourlines  

@synthesize field1;  

@synthesize field2;  

@synthesize field3;  

@synthesize field4;  

  

#pragma mark NSCoding  

- (void)encodeWithCoder:(NSCoder *)aCoder {  

    [aCoder encodeObject:field1 forKey:kField1Key];  

    [aCoder encodeObject:field2 forKey:kField2Key];  

    [aCoder encodeObject:field3 forKey:kField3Key];  

    [aCoder encodeObject:field4 forKey:kField4Key];  

}  

  

-(id) initWithCoder:(NSCoder *)aDecoder {  

    if(self = [super init]) {  

        field1 = [[aDecoder decodeObjectForKey:kField1Key] retain];  

        field2 = [[aDecoder decodeObjectForKey:kField2Key] retain];  

        field3 = [[aDecoder decodeObjectForKey:kField3Key] retain];  

        field4 = [[aDecoder decodeObjectForKey:kField4Key] retain];  

    }  

    return self;  

}  

  

#pragma mark -  

#pragma mark NSCopying  

- (id) copyWithZone:(NSZone *)zone {  

    Fourlines *copy = [[[self class] allocWithZone: zone] init];  

    copy.field1 = [[self.field1 copyWithZone: zone] autorelease];  

    copy.field2 = [[self.field2 copyWithZone: zone] autorelease];  

    copy.field3 = [[self.field3 copyWithZone: zone] autorelease];  

    copy.field4 = [[self.field4 copyWithZone: zone] autorelease];  

    return copy;  

}  

@end  



//  

//  Persistence2ViewController.h  

//  Persistence2  

//  

//  Created by liu lavy on 11-10-3.  

//  Copyright 2011 __MyCompanyName__. All rights reserved.  

//  

  

#import <UIKit/UIKit.h>  

#define kFilename @"archive"  

#define kDataKey @"Data"  

  

@interface Persistence2ViewController : UIViewController {  

    UITextField *filed1;  

    UITextField *field2;  

    UITextField *field3;  

    UITextField *field4;  

}  

@property (nonatomic, retain) IBOutlet UITextField *field1;  

@property (nonatomic, retain) IBOutlet UITextField *field2;  

@property (nonatomic, retain) IBOutlet UITextField *field3;  

@property (nonatomic, retain) IBOutlet UITextField *field4;  

  

- (NSString *)dataFilePath;  

- (void)applicationWillResignActive:(NSNotification *)notification;  

  

@end  



//  

//  Persistence2ViewController.m  

//  Persistence2  

//  

//  Created by liu lavy on 11-10-3.  

//  Copyright 2011 __MyCompanyName__. All rights reserved.  

//  

  

#import "Persistence2ViewController.h"  

#import "Fourlines.h"  

  

@implementation Persistence2ViewController  

@synthesize field1;  

@synthesize field2;  

@synthesize field3;  

@synthesize field4;  

  

//数据文件的完整路径  

- (NSString *)dataFilePath {  

    //检索Documents目录路径。第二个参数表示将搜索限制在我们的应用程序沙盒中  

    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);  

    //每个应用程序只有一个Documents目录  

    NSString *documentsDirectory = [paths objectAtIndex:0];  

    //创建文件名  

    return [documentsDirectory stringByAppendingPathComponent:kFilename];  

}  

  

//应用程序退出时,将数据保存到属性列表文件  

- (void)applicationWillResignActive:(NSNotification *)notification {  

    Fourlines *fourlines = [[Fourlines alloc] init];  

    fourlines.field1 = field1.text;  

    fourlines.field2 = field2.text;  

    fourlines.field3 = field3.text;  

    fourlines.field4 = field4.text;  

      

    NSMutableData *data = [[NSMutableData alloc] init];//用于存储编码的数据  

    NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:data];  

      

    [archiver encodeObject:fourlines forKey:kDataKey];  

    [archiver finishEncoding];  

    [data writeToFile:[self dataFilePath] atomically:YES];  

      

    [fourlines release];  

    [archiver release];  

    [data release];  

}  

  

/* 

 // The designated initializer. Override to perform setup that is required before the view is loaded. 

 - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { 

 self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; 

 if (self) { 

 // Custom initialization 

 } 

 return self; 

 } 

 */  

  

/* 

 // Implement loadView to create a view hierarchy programmatically, without using a nib. 

 - (void)loadView { 

 } 

 */  

  

  

  

// Implement viewDidLoad to do additional setup after loading the view, typically from a nib.  

- (void)viewDidLoad {  

    [super viewDidLoad];  

    NSString *filePath = [self dataFilePath];  

    //检查数据文件是否存在  

    if([[NSFileManager defaultManager] fileExistsAtPath:filePath]) {  

          

        //从文件获取用于解码的数据  

        NSData *data = [[NSMutableData alloc] initWithContentsOfFile:[self dataFilePath]];  

        NSKeyedUnarchiver *unarchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:data];  

          

        Fourlines *fourlines = [unarchiver decodeObjectForKey:kDataKey];  

        [unarchiver finishDecoding];  

          

        field1.text = fourlines.field1;  

        field2.text = fourlines.field2;  

        field3.text = fourlines.field3;  

        field4.text = fourlines.field4;  

          

        [unarchiver release];  

        [data release];  

    }  

    UIApplication *app = [UIApplication sharedApplication];  

    [[NSNotificationCenter defaultCenter] addObserver:self  

                                             selector:@selector(applicationWillResignActive:)  

                                             name:UIApplicationWillResignActiveNotification  

                                             object:app];  

    [super viewDidLoad];  

}  

  

  

/* 

 // Override to allow orientations other than the default portrait orientation. 

 - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { 

 // Return YES for supported orientations 

 return (interfaceOrientation == UIInterfaceOrientationPortrait); 

 } 

 */  

  

- (void)didReceiveMemoryWarning {  

    // Releases the view if it doesn't have a superview.  

    [super didReceiveMemoryWarning];  

      

    // Release any cached data, images, etc that aren't in use.  

}  

  

- (void)viewDidUnload {  

    self.field1 = nil;  

    self.field2 = nil;  

    self.field3 = nil;  

    self.field4 = nil;  

    [super viewDidUnload];  

}  

  

  

- (void)dealloc {  

    [field1 release];  

    [field2 release];  

    [field3 release];  

    [field4 release];  

    [super dealloc];  

}  

@end  

3、SQLite


//  

//  Persistence3ViewController.h  

//  Persistence3  

//  

//  Created by liu lavy on 11-10-3.  

//  Copyright 2011 __MyCompanyName__. All rights reserved.  

//  

  

#import <UIKit/UIKit.h>  

#define kFilename @"data.sqlite3"  

  

@interface Persistence3ViewController : UIViewController {  

    UITextField *filed1;  

    UITextField *field2;  

    UITextField *field3;  

    UITextField *field4;  

}  

@property (nonatomic, retain) IBOutlet UITextField *field1;  

@property (nonatomic, retain) IBOutlet UITextField *field2;  

@property (nonatomic, retain) IBOutlet UITextField *field3;  

@property (nonatomic, retain) IBOutlet UITextField *field4;  

  

- (NSString *)dataFilePath;  

- (void)applicationWillResignActive:(NSNotification *)notification;  

@end  



//  

//  Persistence3ViewController.m  

//  Persistence3  

//  

//  Created by liu lavy on 11-10-3.  

//  Copyright 2011 __MyCompanyName__. All rights reserved.  

//  

  

#import "Persistence3ViewController.h"  

#import <sqlite3.h>  

  

@implementation Persistence3ViewController  

@synthesize field1;  

@synthesize field2;  

@synthesize field3;  

@synthesize field4;  

  

//数据文件的完整路径  

- (NSString *)dataFilePath {  

    //检索Documents目录路径。第二个参数表示将搜索限制在我们的应用程序沙盒中  

    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);  

    //每个应用程序只有一个Documents目录  

    NSString *documentsDirectory = [paths objectAtIndex:0];  

    //创建文件名  

    return [documentsDirectory stringByAppendingPathComponent:kFilename];  

}  

  

//应用程序退出时,将数据保存到属性列表文件  

- (void)applicationWillResignActive:(NSNotification *)notification {  

    sqlite3 *database;  

    if(sqlite3_open([[self dataFilePath] UTF8String], &database) != SQLITE_OK) {  

        sqlite3_close(database);  

        NSAssert(0, @"Failed to open database");  

    }  

      

    for(int i = 1; i <= 4; i++) {  

        NSString *fieldname = [[NSString alloc] initWithFormat:@"field%d", i];  

        UITextField *field = [self valueForKey:fieldname];  

        [fieldname release];  

          

        char *update = "INSERT OR REPLACE INTO FIELDS (ROW, FIELD_DATA) VALUES (?, ?);";  

        sqlite3_stmt *stmt;  

        //将SQL语句编译为sqlite内部一个结构体(sqlite3_stmt),类似java JDBC的PreparedStatement预编译  

        if (sqlite3_prepare_v2(database, update, -1, &stmt, nil) == SQLITE_OK) {  

            //在bind参数的时候,参数列表的index从1开始,而取出数据的时候,列的index是从0开始  

            sqlite3_bind_int(stmt, 1, i);  

            sqlite3_bind_text(stmt, 2, [field.text UTF8String], -1, NULL);  

        } else {  

            NSAssert(0, @"Error:Failed to prepare statemen");  

        }  

        //执行SQL文,获取结果   

        int result = sqlite3_step(stmt);  

        if(result != SQLITE_DONE) {  

            NSAssert1(0, @"Error updating table: %d", result);  

        }  

        //释放stmt占用的内存(sqlite3_prepare_v2()分配的)  

        sqlite3_finalize(stmt);  

    }  

    sqlite3_close(database);  

}  

  

/* 

 // The designated initializer. Override to perform setup that is required before the view is loaded. 

 - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { 

 self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; 

 if (self) { 

 // Custom initialization 

 } 

 return self; 

 } 

 */  

  

/* 

 // Implement loadView to create a view hierarchy programmatically, without using a nib. 

 - (void)loadView { 

 } 

 */  

  

  

  

// Implement viewDidLoad to do additional setup after loading the view, typically from a nib.  

- (void)viewDidLoad {  

    [super viewDidLoad];  

    NSString *filePath = [self dataFilePath];  

    //检查数据文件是否存在  

    if([[NSFileManager defaultManager] fileExistsAtPath:filePath]) {  

        //打开数据库  

        sqlite3 *database;  

        if(sqlite3_open([filePath UTF8String], &database) != SQLITE_OK) {  

            sqlite3_close(database);  

            NSAssert(0, @"Failed to open database");  

        }  

          

        //创建表  

        char *errorMsg;  

        NSString *createSQL =   

            @"CREATE TABLE IF NOT EXISTS FIELDS (ROW INTEGER PRIMARY KEY, FIELD_DATA TEXT);";  

        if(sqlite3_exec(database, [createSQL UTF8String], NULL, NULL, &errorMsg) != SQLITE_OK) {  

            sqlite3_close(database);  

            NSAssert(0, @"Error creating table: %s", errorMsg);  

        }  

  

        //查询  

        NSString *query = @"SELECT ROW, FIELD_DATA FROM FIELDS ORDER BY ROW";  

        sqlite3_stmt *statement;  

        //设置nByte可以加速操作  

        if(sqlite3_prepare_v2(database, [query UTF8String], -1, &statement, nil) == SQLITE_OK) {  

            while (sqlite3_step(statement) == SQLITE_ROW) {//返回每一行  

                int row = sqlite3_column_int(statement, 0);  

                char *rowData = (char *)sqlite3_column_text(statement, 1);  

                  

                NSString *fieldName = [[NSString alloc] initWithFormat:@"field%d", row];  

                NSString *fieldValue = [[NSString alloc] initWithUTF8String:rowData];  

                  

                UITextField *field = [self valueForKey:fieldName];  

                field.text = fieldValue;  

                  

                [fieldName release];  

                [fieldValue release];  

            }  

            //释放statement占用的内存(sqlite3_prepare()分配的)  

            sqlite3_finalize(statement);  

        }  

        sqlite3_close(database);  

    }  

      

      

    UIApplication *app = [UIApplication sharedApplication];  

    [[NSNotificationCenter defaultCenter] addObserver:self  

                                             selector:@selector(applicationWillResignActive:)  

                                                 name:UIApplicationWillResignActiveNotification  

                                               object:app];  

    [super viewDidLoad];  

}  

  

  

/* 

 // Override to allow orientations other than the default portrait orientation. 

 - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { 

 // Return YES for supported orientations 

 return (interfaceOrientation == UIInterfaceOrientationPortrait); 

 } 

 */  

  

- (void)didReceiveMemoryWarning {  

    // Releases the view if it doesn't have a superview.  

    [super didReceiveMemoryWarning];  

      

    // Release any cached data, images, etc that aren't in use.  

}  

  

- (void)viewDidUnload {  

    self.field1 = nil;  

    self.field2 = nil;  

    self.field3 = nil;  

    self.field4 = nil;  

    [super viewDidUnload];  

}  

  

  

- (void)dealloc {  

    [field1 release];  

    [field2 release];  

    [field3 release];  

    [field4 release];  

    [super dealloc];  

}  

  

@end  

4、Core Data


//  

//  PersistenceViewController.h  

//  Persistence4  

//  

//  Created by liu lavy on 11-10-3.  

//  Copyright 2011 __MyCompanyName__. All rights reserved.  

//  

  

#import <UIKit/UIKit.h>  

  

  

@interface PersistenceViewController : UIViewController {  

    UITextField *filed1;  

    UITextField *field2;  

    UITextField *field3;  

    UITextField *field4;  

}  

@property (nonatomic, retain) IBOutlet UITextField *field1;  

@property (nonatomic, retain) IBOutlet UITextField *field2;  

@property (nonatomic, retain) IBOutlet UITextField *field3;  

@property (nonatomic, retain) IBOutlet UITextField *field4;  

  

@end  



//  

//  PersistenceViewController.m  

//  Persistence4  

//  

//  Created by liu lavy on 11-10-3.  

//  Copyright 2011 __MyCompanyName__. All rights reserved.  

//  

  

#import "PersistenceViewController.h"  

#import "Persistence4AppDelegate.h"  

  

@implementation PersistenceViewController  

@synthesize field1;  

@synthesize field2;  

@synthesize field3;  

@synthesize field4;  

  

  

-(void) applicationWillResignActive:(NSNotification *)notification {  

    Persistence4AppDelegate *appDelegate = [[UIApplication sharedApplication] delegate];  

    NSManagedObjectContext *context = [appDelegate managedObjectContext];  

    NSError *error;  

    for(int i = 1; i <= 4; i++) {  

        NSString *fieldName = [NSString stringWithFormat:@"field%d", i];  

        UITextField *theField = [self valueForKey:fieldName];  

          

        //创建提取请求  

        NSFetchRequest *request = [[NSFetchRequest alloc] init];  

        //创建实体描述并关联到请求  

        NSEntityDescription *entityDescription = [NSEntityDescription entityForName:@"Line"  

                                                             inManagedObjectContext:context];  

        [request setEntity:entityDescription];  

          

        //设置检索数据的条件  

        NSPredicate *pred = [NSPredicate predicateWithFormat:@"(lineNum = %d)", i];  

        [request setPredicate:pred];  

          

        NSManagedObject *theLine = nil;  

        ////检查是否返回了标准匹配的对象,如果有则加载它,如果没有则创建一个新的托管对象来保存此字段的文本  

        NSArray *objects = [context executeFetchRequest:request error:&error];  

        if(!objects) {  

            NSLog(@"There was an error");  

        }  

        //if(objects.count > 0) {  

        //  theLine = [objects objectAtIndex:0];  

        //} else {  

            //创建一个新的托管对象来保存此字段的文本  

            theLine = [NSEntityDescription insertNewObjectForEntityForName:@"Line"  

                                                    inManagedObjectContext:context];  

            [theLine setValue:[NSNumber numberWithInt:i] forKey:@"lineNum"];  

            [theLine setValue:theField.text forKey:@"lineText"];  

        //}  

        [request release];  

    }  

    //通知上下文保存更改  

    [context save:&error];  

      

}  

  

// The designated initializer.  Override if you create the controller programmatically and want to perform customization that is not appropriate for viewDidLoad.  

/* 

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { 

    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; 

    if (self) { 

        // Custom initialization. 

    } 

    return self; 

} 

*/  

  

  

// Implement viewDidLoad to do additional setup after loading the view, typically from a nib.  

- (void)viewDidLoad {  

    Persistence4AppDelegate *appDelegate = [[UIApplication sharedApplication] delegate];  

      

    NSManagedObjectContext *context = [appDelegate managedObjectContext];  

    //创建一个实体描述  

    NSEntityDescription *entityDescription = [NSEntityDescription entityForName:@"Line" inManagedObjectContext:context];  

    //创建一个请求,用于提取对象  

    NSFetchRequest *request = [[NSFetchRequest alloc] init];  

    [request setEntity:entityDescription];  

      

    //检索对象  

    NSError *error;  

    NSArray *objects = [context executeFetchRequest:request error:&error];  

    if(!objects) {  

        NSLog(@"There was an error!");  

    }  

    for(NSManagedObject *obj in objects) {  

        NSNumber *lineNum = [obj valueForKey:@"lineNum"];  

        NSString *lineText = [obj valueForKey:@"lineText"];  

        NSString *fieldName = [NSString stringWithFormat:@"field%d", [lineNum integerValue]];  

        UITextField *textField = [self valueForKey:fieldName];  

        textField.text = lineText;  

    }  

    [request release];  

      

    UIApplication *app = [UIApplication sharedApplication];  

    [[NSNotificationCenter defaultCenter] addObserver:self   

                                             selector:@selector(applicationWillResignActive:)   

                                                 name:UIApplicationWillResignActiveNotification  

                                               object:app];  

    [super viewDidLoad];  

}  

  

/* 

// Override to allow orientations other than the default portrait orientation. 

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { 

    // Return YES for supported orientations. 

    return (interfaceOrientation == UIInterfaceOrientationPortrait); 

} 

*/  

  

- (void)didReceiveMemoryWarning {  

    // Releases the view if it doesn't have a superview.  

    [super didReceiveMemoryWarning];  

      

    // Release any cached data, images, etc. that aren't in use.  

}  

  

- (void)viewDidUnload {  

    self.field1 = nil;  

    self.field2 = nil;  

    self.field3 = nil;  

    self.field4 = nil;  

    [super viewDidUnload];  

}  

  

  

- (void)dealloc {  

    [field1 release];  

    [field2 release];  

    [field3 release];  

    [field4 release];  

    [super dealloc];  

}  

  

  

  

@end  


5、AppSettings

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];  


6、普通文件存储

这种方式即自己将数据通过IO保存到文件,或从文件读取。

声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:notice#yiidian.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。