將下班,余些許時(shí)間,閑來(lái)無(wú)事,偶憶他人詢歸解檔之簡(jiǎn)法,故作小結(jié),祈與君有助。
閑言簡(jiǎn)之,此為尋代碼之處。
用法簡(jiǎn)介之:
1、移以下類別于君項(xiàng)目中。
image
2、無(wú)它操作,遂心將類對(duì)象歸解檔之。
3、做歸解檔演示狀:
歸檔:
//創(chuàng)建需要?dú)w檔的對(duì)象
Car *car = [[Car alloc] init];
car.brand = @"BMW";
car.color = [UIColor redColor];
//歸檔文件路徑
NSString *filePath = [DOCUMENTSDIR stringByAppendingPathComponent:FILENAME];
//歸檔
[NSKeyedArchiver archiveRootObject:car toFile:filePath];
解檔:
//解檔文件路徑
NSString *filePath = [DOCUMENTSDIR stringByAppendingPathComponent:FILENAME];
//解檔
Car *car = [NSKeyedUnarchiver unarchiveObjectWithFile:filePath];
原理簡(jiǎn)介之
@interface NSObject (Archive)
#import <objc/runtime.h>
于基類作之,運(yùn)行時(shí)助之,子類廣適之。
unsigned int ivarsCount = 0;
Ivar *ivars = class_copyIvarList([self class], &ivarsCount);
運(yùn)行時(shí)助尋類之屬性。
for (int i = 0; i < ivarsCount; i++) {
NSString *key = [NSString stringWithUTF8String:ivar_getName(ivars[i])];
[coder encodeObject:[self valueForKey:key] forKey:key];
}
屬性遍歷之,以歸檔之法逐一適之。
反之解檔相似也,唯尋屬性逐一解之。
望與君有助。