标签:
一、沙盒机制
1、什么是沙盒?
2、沙盒机制(SandBox)
3、沙盒机制的特点:
4、查找某个应用程序的沙盒有两种方式
// 地址是一个字符串 // 第一个参数是:枚举值,枚举你具体要查找的文件夹(要进入哪个文件夹直接修改其枚举值即可) // NSDocumentDirectory:进去Document文件夹 // 第二个参数:NSUserDomainMask表示用户的主目录 // 第三个参数:一般设置为YES表示展示完整的路径 // NSSearchPathForDirectoriesInDomains 查找沙盒路径的,返回值是一个数组,这个数组里边只有一个元素,这个元素就是路径,直接使用下标取出即可 NSString *documentPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]; NSLog(@"documentPath = %@", documentPath); NSString *cachesPath = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) objectAtIndex:0]; NSLog(@"cachesPath = %@", cachesPath);
// 第一步:找到主目录文件夹 NSString *homePath = NSHomeDirectory(); NSLog(@"homePath = %@", homePath); // 第二步:然后拼接自己想进入的路径 NSString *documentPathTwo = [homePath stringByAppendingPathComponent:@"Documents"]; NSLog(@"documentPathTwo = %@", documentPathTwo); NSString *libraryPath = [homePath stringByAppendingPathComponent:@"Library"]; NSLog(@"libraryPath = %@", libraryPath);
NSString *temPath = NSTemporaryDirectory(); NSLog(@"tmp = %@", temPath);
二、简单对象的写入与读取
1、iOS中提供4种简单对象类型可以直接进行文件存取:NSString(字符串)、NSArray(数组)、NSDictionary(字典)、NSData(数据)。包括他们的子类。
2、简单对象的写入/读取:
// 1.需要知道这个对象存在哪里,所以需要一个文件夹的路径 // 找到Documents文件夹路径 NSString *documentsPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]; // 2.创建要存储的内容:字符串 NSString *str = @"AJAR"; // 3.需要知道字符串最终存储的地方,所以需要创建一个路径去存储字符串 NSString *strPath = [documentsPath stringByAppendingPathComponent:@"text.txt"]; // 4.将字符串写入文件 // 第一个参数:写入的文件的一个路径 // 第二个参数:编码方式 // 第三个参数:错误信息 [str writeToFile:strPath atomically:YES encoding:NSUTF8StringEncoding error:nil]; #pragma mark - 将NSString文件夹存储的内容取出来 // 将字符串取出,使用stringWithContentsOfFile这个方法将其取出 // 第一个参数:字符串存储的路径 // 第二个参数:编码方式 // 第三个参数:错误信息 NSString *newStr = [NSString stringWithContentsOfFile:strPath encoding:NSUTF8StringEncoding error:nil]; NSLog(@"newStr = %@", newStr);
// 创建图片对象 UIImage *image = [UIImage imageNamed:@"v_red_heart_selected@3x"]; // 将image类型的对象转换成NSData类型的数据进行存储 // 使用UIImageJPEGRepresentation将图片转换成NSData类型的 // 第一个参数:要转换的image对象 // 第二个参数:表示图片压缩的值compressionQuality // iPhone中将大于2M的图片,会自动旋转90度压缩处理,所以最终会将图片保存成jpeg格式的 NSData *imageData = UIImageJPEGRepresentation(image, 1); // 找到路径进行存储 NSString *documentPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]; // 最终路径 NSString *imagePath = [documentPath stringByAppendingString:@"/123.jpeg"]; [imageData writeToFile:imagePath atomically:YES]; NSLog(@"image = %@", imagePath); // 读取NSData类型的数据 // 需求:将NSData类型的数据转换成UIImage并显示在ImageView上 NSData *newData = [NSData dataWithContentsOfFile:imagePath]; UIImage *showImage = [[UIImage alloc] initWithData:newData]; UIImageView *myImageView = [[UIImageView alloc] initWithImage:showImage]; [self.view addSubview:myImageView];
三、复杂对象的写入与读取
1、复杂对象是指在Foundation框架内不存在的数据类,如自定义Person类无法再程序内通过writeToFile:这个方法写入到文件内。
2、归档与反归档(解档)
@interface Person : NSObject<NSCoding> /// 姓名 @property (nonatomic, copy) NSString *name; /// 性别 @property (nonatomic, copy) NSString *gender; /// 年龄 @property (nonatomic, assign) NSInteger age; @end @implementation Person // 归档 // 将所有的属性进行归档 - (void)encodeWithCoder:(NSCoder *)aCoder { [aCoder encodeObject:self.name forKey:@"name"]; [aCoder encodeObject:self.gender forKey:@"gender"]; [aCoder encodeInteger:self.age forKey:@"age"]; } // 反归档 // 将所有属性进行反归档 - (instancetype)initWithCoder:(NSCoder *)aDecoder { self = [super init]; if (self) { self.name = [aDecoder decodeObjectForKey:@"name"]; self.gender = [aDecoder decodeObjectForKey:@"gender"]; self.age = [aDecoder decodeIntegerForKey:@"age"]; } return self; } @end
// 1.找寻Documents文件夹的目录 NSString *documentPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]; // 2.创建Person对象 Person *person = [[Person alloc] init]; person.name = @"MBBoy"; person.gender = @"man"; person.age = 25; // 3.把这个复杂对象归档 // 3.1创建NSMutableData对象,用于初始化归档工具 NSMutableData *personData = [NSMutableData data]; // 3.2创建归档工具 NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:personData]; // 3.3对要归档的person对象进行归档 [archiver encodeObject:person forKey:@"person"]; // 3.4结束归档 [archiver finishEncoding]; // 4.将归档的内容存到本地 NSString *dataPath = [documentPath stringByAppendingPathComponent:@"person.plist"]; [personData writeToFile:dataPath atomically:YES]; NSLog(@"%@", dataPath); #pragma mark - 反归档 // 1.将要反归档的数据找出 NSData *resultData = [NSData dataWithContentsOfFile:dataPath]; // 2.创建解档工具 NSKeyedUnarchiver *unarchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:resultData]; // 3.对perosn对象进行解档 Person *newPerson = [unarchiver decodeObjectForKey:@"person"]; // 4.结束解档 [unarchiver finishDecoding]; NSLog(@"%@",newPerson.name);
标签:
原文地址:http://www.cnblogs.com/soley/p/5456384.html