当前位置: 首页 > wzjs >正文

手工艺品网站建设目的网站推广优化方法

手工艺品网站建设目的,网站推广优化方法,直播软件的app,上海市住宅建设发展中心网站NSCoding 是一个协议,用于支持对象的序列化和反序列化,也就是“归档”和“解档”操作。归档的过程将对象保存为数据,可以存储到磁盘、数据库或者传输到网络,而解档是将这些数据恢复为原始的对象。 NSCoding 协议 NSCoding 协议有…

NSCoding 是一个协议,用于支持对象的序列化和反序列化,也就是“归档”和“解档”操作。归档的过程将对象保存为数据,可以存储到磁盘、数据库或者传输到网络,而解档是将这些数据恢复为原始的对象。

NSCoding 协议

NSCoding 协议有两个主要方法:

  1. encodeWithCoder:: 将对象的状态编码成数据,这个方法在归档过程中被调用。
  2. initWithCoder:: 从数据中解码并还原对象的状态,这个方法在解档时被调用。

为什么使用 NSCoding?

  • 数据持久化:将对象的状态保存到文件中,使得在应用关闭后仍然能恢复这些对象的状态。
  • 数据传输:通过网络发送对象时,可以先将对象归档成二进制格式,再进行传输。
  • 缓存:将对象缓存到磁盘,以便下次使用,避免重复计算或请求。

如何实现 NSCoding?

要让一个类支持归档和解档,必须遵守 NSCoding 协议,具体实现两个方法:encodeWithCoder:initWithCoder:

示例

假设我们有一个 Person 类,需要将其归档并解档:

1. Person 类实现 NSCoding 协议
#import <Foundation/Foundation.h>@interface Person : NSObject <NSCoding>@property (nonatomic, strong) NSString *name;
@property (nonatomic, assign) NSInteger age;- (instancetype)initWithName:(NSString *)name age:(NSInteger)age;@end@implementation Person- (instancetype)initWithName:(NSString *)name age:(NSInteger)age {self = [super init];if (self) {_name = name;_age = age;}return self;
}#pragma mark - NSCoding// 归档(编码)
- (void)encodeWithCoder:(NSCoder *)coder {[coder encodeObject:self.name forKey:@"name"];[coder encodeInteger:self.age forKey:@"age"];
}// 解档(解码)
- (instancetype)initWithCoder:(NSCoder *)coder {self = [super init];if (self) {_name = [coder decodeObjectForKey:@"name"];_age = [coder decodeIntegerForKey:@"age"];}return self;
}@end
2. 使用 NSKeyedArchiver 和 NSKeyedUnarchiver 进行归档和解档
// 创建一个 Person 对象
Person *person = [[Person alloc] initWithName:@"Alice" age:30];// 归档:将 Person 对象转换成 NSData,并保存到文件中
NSData *data = [NSKeyedArchiver archivedDataWithRootObject:person];// 保存到文件
NSString *filePath = [NSTemporaryDirectory() stringByAppendingPathComponent:@"person.archive"];
[data writeToFile:filePath atomically:YES];// 解档:从文件中读取数据并恢复成 Person 对象
NSData *savedData = [NSData dataWithContentsOfFile:filePath];
Person *decodedPerson = [NSKeyedUnarchiver unarchiveObjectWithData:savedData];// 输出解档后的对象信息
NSLog(@"Name: %@, Age: %ld", decodedPerson.name, (long)decodedPerson.age);
3. 解释代码
  • 归档
    • 使用 NSKeyedArchiverPerson 对象转化为 NSData。其中,encodeWithCoder: 方法会被自动调用,将对象的属性保存到数据中。
    • 归档后的数据可以保存到文件、数据库或发送到网络。
  • 解档
    • 使用 NSKeyedUnarchiverNSData 解析为 Person 对象。此时,initWithCoder: 方法被调用,解码过程会根据保存时的 key 恢复对象的状态。

实际应用场景

  1. 用户数据持久化
    • 当用户退出应用时,保存用户信息(如用户名、头像、登录状态等)到本地,当再次启动应用时,恢复这些信息。
  2. 缓存数据
    • 将网络请求得到的结果(如图片、文章内容等)进行归档,缓存到本地,下次启动应用时直接读取缓存,减少网络请求。
  3. 对象序列化与反序列化
    • 在 iOS 应用中,常常需要将对象数据存储到 UserDefaults 或数据库中,使用归档可以非常方便地将对象数据存储和恢复。

注意事项

  • 归档对象需要遵守 NSCoding 协议:只有实现了 encodeWithCoder:initWithCoder: 的类才支持归档。

  • 对象中引用的其他对象也需要遵守 NSCoding 协议:如果一个对象的属性是另一个对象(比如 Person 中的 address 是一个 Address 对象),那么 Address 类也需要实现 NSCoding,否则在归档和解档时会出错。

  • 避免归档非必要属性:对于不需要归档的属性(比如临时计算值、私有变量等),可以在归档过程中忽略。可以通过 @property@dynamic 来排除一些字段的归档。

  • iOS 10 之后,归档和解档的 API 被弃用

    • iOS 10 后,NSKeyedArchiverNSKeyedUnarchiver 被一些新的方法所替代(如 NSKeyedArchiver.archivedData(withRootObject:)),为了避免未来的兼容性问题,建议使用新的归档 API。
http://www.dtcms.com/wzjs/340710.html

相关文章:

  • 素马网站建设费用差距网页设计制作网站教程
  • 桂林遇龙河seo课程培训入门
  • 用html做班级网站2345网址导航浏览器下载
  • 网页制作与网站建设完全学习手册光盘百度163黄页关键词挖掘
  • 深圳网站建设响应式网站深圳百度竞价推广
  • 濮阳做网站公司seo的主要工作内容
  • 快速优化网站建设新闻头条免费下载安装
  • 医疗网站建设策划网络营销成功案例介绍
  • 建设个人网站需要备案吗网络营销环境
  • 四川广汉市规划和建设局网站免费推广
  • 一个成功的网站必须具备哪几个要素网站营销网站营销推广
  • 曲沃网站建设网络营销的成功案例
  • 东莞阳光网站官网搜索引擎入口网址
  • linux做网站的好处国外免费舆情网站有哪些软件
  • 公司建的站加油违法吗郑州网络营销公司哪个好
  • 在哪个网站上做预收款报告seo外包公司
  • 有了域名怎么做网站正在直播足球比赛
  • 个人宽带弄网站可以吗线上营销策略有哪些
  • 贵阳市网站做的最好的公司网页制作模板
  • 建设网站有什么风险灰色推广引流联系方式
  • 建设网站的注意事项百度服务中心人工客服电话
  • 西宁网站搭建企业兰州网站seo优化
  • 简述网站与网页的区别下载百度搜索
  • 儿童做网站十大网站平台
  • 扁平化设计网站建设台州做优化
  • 吴江网站优化友情链接的检查方法
  • 沈阳网站优化推广方案网址域名查询
  • 深圳品牌网站制作咨询电话如何注册网站免费注册
  • 租用服务器网站教育机构退费纠纷找谁
  • 做校园二手交易网站的目的流量精灵官网