NSCoding的使用方法---Mac上的归档.

NSCoding是什么?

NSCoding就是我们俗称的归档, 归档的意思就是把工程里的某一段对象的代码以文件的方式储存起来, 在这里分别有两种归档方式, 一中是在Mac上的归档, 一种是iOS上的归档, 今天这里只介绍在Mac上的归档.

这里涉及的方法.

NSData

NSKeyedArchiver archivedDataWithRootObject:这个方法的意思就是把某一个对象以二进制的形式储存起来.

writeToFile: atomically:这个方法的意思就是, 存储的路径以及是否存储.

下面是一个简单的例子:

首先我们要创建一个新的类, 这里我们需要注意一个东西, 新创建的类继承与NSObject, 但同时要实现NSCoding的协议.

#import <Foundation/Foundation.h>

@interface Human : NSObject <NSCoding>
{
@private
    int _age;
    NSString *_name;
    Human *_child;
}

@property (nonatomic, assign)int age;
@property (nonatomic, copy)NSString *name;
@property (nonatomic, retain)Human *child;

@end

实现NSCoding协议里的方法.

#import "Human.h"

@implementation Human

@synthesize age;
@synthesize name;
@synthesize child;

//实现协议里的归档方法.
- (void) encodeWithCoder:(NSCoder *)aCoder
{
    [aCoder encodeInt:age forKey:@"_age"];
    [aCoder encodeObject:name forKey:@"_name"];
    [aCoder encodeObject:child forKey:@"_child"];
}

//实现协议里的解档方法.
- (id)initWithCoder:(NSCoder *)aDecoder
{
    if(self = [super init]){
        self.age = [aDecoder decodeIntForKey:@"_age"];
        self.name = [aDecoder decodeObjectForKey:@"_name"];
        self.child = [aDecoder decodeObjectForKey:@"_child"];
    }
    return self;
}
@end

在主函数初始化要归档的对象和参数.

#import <Foundation/Foundation.h>
#import "Human.h"

int main(int argc, const char * argv[]) {
    @autoreleasepool {

        Human *human1 = [[Human alloc]init];
        Human *human2 = [[Human alloc]init];

        human1.age = 20;
        human1.name = @"xiaoming";
        human1.child = human2;

        NSData *data1 = [NSKeyedArchiver archivedDataWithRootObject:human1];
        [data1 writeToFile:@"/Users/Cain/Desktop/Objective-C/实验代码/文件操作/归档/Human/human.txt" atomically:YES];
        NSLog(@"%@",data1);  }  return 0;}
时间: 2024-10-07 12:14:45

NSCoding的使用方法---Mac上的归档.的相关文章

NSCoding的使用方法---Mac上的归档(优化版).

这个方法是根据上次发的那个方法进行了一些修改, 更加方便一些. 由于新建的类里面的代码没有更改, 所以这里不再写了. 优化的好处: 在开头的时候定义一个宏, 把路径直接放在宏这里, 如果以后要更改地址, 直接更改宏定义的就OK了. #import <Foundation/Foundation.h> #import "Human.h" #define PATH @"/Users/Cain/Desktop/Objective-C/实验代码/文件操作/归档/Human/

NSCoding的使用方法---iOS上的归档.

在iOS上的归档和在Mac上的归档有些不一样, 在Mac上的归档你可以把文件放在任意的一个文件夹里面, 但是在iOS上, 你所写的文件就只能放在三个文件夹里, 分别是Documents, Library, tmp三个文件, 这里需要注意一下, library和tmp文件会在软件升级, 系统升级或者系统空间不足时会自动清除里面的文件, 只有在Documents文件才可以永久保存, 直到你把软件删除为止. 这里涉及的方法: NSHomeDirectory:这个方法的意思就是获取软件的主目录. str

NSCoding的使用方法---iOS上的归档(增加更改内容的方法).

上一章我们介绍了在iOS上的归档以及解档, 今天我们在归档之后稍微做一些改变, 使得解档之后得到的结果有所不同, 这个方法类似NSMutableXXX, 可修改里面的参数, 下面让我们来看看吧. 涉及的方法: seekToFileOffset:这个方法是寻求方法的偏移, 意思就是在文件中寻找文本里的起点. readDataOfLength:这个方法是指读取文件的长度是多少. offsetInFile:是指写到第几个位置. #import "ViewController.h" #defi

用pyenv管理Python多版本及下载加速方法--Mac上

原文:https://www.jianshu.com/p/91fc7ecc5e46 先大致介绍下pyenv的安装及配置流程.随后介绍加速下载方法 安装: brew install pyenv 配置 在如下文件中 ~/.bash_profile 添加配置 export PYENV_ROOT=/usr/local/var/pyenv if which pyenv > /dev/null; then eval "$(pyenv init -)"; fi 如果使用zsh,则需要在如下文件

mac 上运行cassandra出现的java.net.MalformedURLException: Local host name unknown: java.net.UnknownHostException: : : unknown error错误解决方法

运行: ./bin/cassandra 得到输出结果: objc[1881]: Class JavaLaunchHelper is implemented in both /Library/Java/JavaVirtualMachines/jdk1.8.0_25.jdk/Contents/Home/bin/java and /Library/Java/JavaVirtualMachines/jdk1.8.0_25.jdk/Contents/Home/jre/lib/libinstrument.d

mac上SVN项目管理,提示被锁定的解决方法

问题 mac上SVN项目管理,提示被锁定,不能commit,也不能update,提示 clean the working copy and then... 解决方法

在mac上无法使用Android Studio的解决方法

随着android Studio 1.0的正式发布,估计使用的人会越来越多,并且官网上现在已经没有融合好的eclipse下载了,官方推荐下载android Studio.之前的beta版我也安装过,好像是可以使用的,可是这次下载安装后在mac上面始终提示找不到JVM,可是我的电脑jdk肯定是安装过的啊,这是为什么呢?在度娘上始终没能找到答案,只好问谷歌了,原来是我把mac上系统自带的java6卸载了,android Studio需要找java6,实在是感觉有点过份了.于是上apple去下载了ja

Mac 上搭建基于 Hexo + GitHub 个人博客

环境配置 本人电脑系统:macOS Node.js 生成静态页面.安装Node.js Git 用于将本地 Hexo 内容提交到 Github.Xcode自带Git(前提:macOS已经安装了Xcode),若没有,可以参考 Hexo官网上的安装方法. 安装 Hexo 当 Node.js 和 Git 都安装好后,就可以正式安装 Hexo 了,终端执行如下命令: $ sudo npm install -g hexo 输入管理员密码(Mac 登陆密码)即可开始安装. 注: sudo:linux系统管理指

appium+python在Mac上环境搭建

前言 mac上搭建appium+python的环境还是有点复杂的,需要准备的软件 1.nodejs 2.npm 3.cnpm 4.appium 5.pip 6.Appium-Python-Client 一.nodejs安装 1.nodejs下载地址:https://nodejs.org/ 2.下载完成后傻瓜式下一步安装 3.打开终端,查看版本号是否安装成功,输入:node -v 二.npm安装 1.打开终端,输入:sudo bash 2.继续输入:sudo curl -L https://npm