天天看點

iOS 資料儲存4種方式總結

1.NSKeyedArchiver:采用歸檔的形式來儲存資料,該資料對象需要遵守NSCoding協定,并且該對象對應的必須提供encodeWithCoder:和initWithCoder:方法。前一個方法告訴系統怎麼對對象進行<span style="margin:0px; padding:0px; border:none; background-color:inherit">編碼,而後一個法則是告訴系統怎麼對對象進行解碼。例如
           

對象歸檔儲存。  定義Student:  

@interface MJStudent : NSObject  <NSCoding>
@property (nonatomic, copy) NSString *no;
@property (nonatomic, assign) double height;
@property (nonatomic, assign) int age;
@end
           
- (void)encodeWithCoder:(NSCoder *)enCoder {
    [enCoder encodeObject:self.no forKey:@"no"];
    [enCoder encodeInt:self.age forKey:@"age"];
    [enCoder encodeDouble:self.height forKey:@"height"];
}

- (id)initWithCoder:(NSCoder *)decoder {
    if (self = [super init]) {
        self.no = [decoder decodeObjectForKey:@"no"];
        self.age = [decoder decodeIntForKey:@"age"];
        self.height = [decoder decodeDoubleForKey:@"height"];
    }
    return self;
}
           

   調用:

// 1.新的模型對象
    Student *stu = [[Student alloc] init];
    stu.no = @"10203203";
    stu.age = 19;
    stu.height = 1.58;
    
    // 2.歸檔模型對象
    // 2.1.獲得Documents的全路徑
    NSString *document = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
    NSString *path = [document stringByAppendingPathComponent:@"studengt.data"];
    [NSKeyedArchiver archiveRootObject:stu toFile:path];
           
// 3.從檔案中讀取MJStudent對象
    Student *stu = [NSKeyedUnarchiver unarchiveObjectWithFile:path];
           

缺點:歸檔的形式來儲存資料,隻能一次性歸檔儲存以及一次性解壓。是以隻能針對小量資料,而且對資料操 作比較笨拙,即如果想改動資料的某一小部分,還是需要解壓整個資料或者歸檔整個資料。  

2.NSUserDefaults:用來儲存應用程式設定和屬性、使用者儲存的資料。使用者再次打開程式或開機後這些資料仍然存在。NSUserDefaults可以存儲的資料類型包括:NSData、NSString、NSNumber、NSDate、

NSArray、NSDictionary。如果要存儲其他類型,則需要轉換為前面的類型,才能用NSUserDefaults存儲。具體實作為:   儲存資料:

// 1.利用NSUserDefaults,就能直接通路軟體的偏好設定(Library/Preferences)
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    
    // 2.存儲資料
    [defaults setObject:@"yang" forKey:@"account"];
    [defaults setObject:@"123456" forKey:@"password"];
    [defaults setInteger:19 forKey:@"age"];
    [defaults setBool:YES forKey:@"auto_login"];
    // 3.立刻同步
    [defaults synchronize];
           
//4.讀取資料  
           
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]
           
NSString *account = [defaults objectForKey:@"account"] 
           

3. Write寫入方式:永久儲存在磁盤中。具體方法為:

// 1.獲得沙盒根路徑
    NSString *home = NSHomeDirectory();
    // 2.document路徑
    NSString *docPath = [home stringByAppendingPathComponent:@"Documents"];
    // 3.建立資料
    NSArray *data = @[@"yang", @19, @"ffdsf"];
    NSString *filepath = [docPath stringByAppendingPathComponent:@"data.plist"];
    [data writeToFile:filepath atomically:YES];                                                                                     4.讀取檔案<p class="p1"><span class="s1">     NSArray</span><span class="s2"> *data = [</span><span class="s1">NSArray</span><span class="s2"> </span><span class="s3">arrayWithContentsOfFile</span><span class="s2">:filepath];</span></p>
           
</pre><pre name="code" class="objc">
           

4. SQLite:采用SQLite資料庫來存儲資料。SQLite作為一中小型資料庫,應用ios中,跟前三種儲存方式相比,相對比較複雜一些。此處就不舉例了