NSCoding的常见用途

使用序列化和反序列化函数archivedDataWithRootObject和unarchivedObjectOfClasses的使用和遇到问题及解决方案 为何archiveRootObject和unarchiveObjectWithFile正常,而archivedDataWithRootObject和unarchivedObjectOfClasses一直报错。解决方案:遵循NSSecureCoding协议,把所有序列化的对象加入对象集合,对象的所有成员变量序列化和反序列化 阅读详情
我们会在以下这些场合用到NSCoding:
1. XIB/Storyboard
我们在创建一个UIView的subclass的时候,会注意到,如果我们希望在初始化这个view的时候就要做一些事情,不但要覆盖掉initWithFrame:方法,也要覆盖initWithCoder:方法。
如果这个view是我们用代码创建的,那么会调用到initWithFrame:方法,但如果我们是XIB则会调用initWithCoder:这个方法。
XIB或是Storyboard在我们编写程序的期间是XML格式的档案,当我们编译App的时候,XCode会将其编译成binary格式的data,分别是NIB与storyboardc,而这些data其实就是序列化过的Objective-C View对象。
将data转成view,这个流程正是NSCoding protocol,我们从UIView的interface中可以看到UIView实现了NSCoding protocol。

2. NSUserDefaults

在我们的App中,如果我们要储存一些偏好设定,那么最好的选择就是NSUserDefaults。操作NSUserDefaults和操作NSDictionary差不多,只要指定特定的key,就可以将设定值存入NSUserDefaults中。
NSUserDefaults支持NSString、NSArray、NSDictionary、NSData以及int、doubel、float等类型的数据。
但如果是我们自定义的Class,就无法存入NSUserDefaults中,我们会先通过NSCoding转成NSData后存入,在取出的时候也要多做一次unarchive。
UIColor *color = [UIColor colorWithHue:1.0 saturation:0.5 brightness:0.5 alpha:1.0];
NSData *data = [NSKeyedArchiver archivedDataWithRootObject:color];
[[NSUserDefaults standardUserDefaults] setObject:data forKey:@"color"];
NSCoding 对象存储序列化 自定义的对象不能直接存储 对自定义对象实现nscoding 协议 可实现对自定义对象的存储 立即下载

相关推荐

NSCodingHelper:一种使用NSCoding ^ _ ^的简单方法

NSCodingHelper 一种使用NSCoding ^ _ ^的简单方法 在.m文件中添加两行代码,然后运行它! #import "property.h" #import "CXLCodingHelper.h" @implementation property - (id)initWithCoder:(NSCoder *)aDecoder { self = [super init]; if (!self) { return nil; } self = [CXLCodingHelper decodeClass:self decoder:aDecoder]; return self; } -(void)encodeWithCoder:(NSCoder *)aCoder { [CXLCodingHelper encodeCl

【ios】NSCoding协议的使用

在IOS中,我们经常会把对象、集合装换成NSData类型,以便于更好的数据存储和数据处理。 eg: NSArray *array = [NSArray arrayWithObjects:@"aaa", @"bbb", @"ccc"]       NSData *data02 = [NSKeyedArchiver archivedDataWithRootObject:array];//通过归档对

guanhuiwit的专栏 2772

史上最全的Logisim存储系统实验教程(基于华中科技大学计算机组成原理实验)内赋源码下载

本博客是最全的最好的解释的华中科技大学计算机组成实验存储系统实验,本博客给出了电路实现,也给出了使用电路的原因有利于新手学习十分详细。并且内赋源码下载。

qq_62325622的博客 2万+

IOS开发之NSCoding协议(使用runtime)

近期学习IOS的runtime库,然后看到之前写的NSCoding协议有点复杂,如果属性少还好,如果100多个属性,则会显得麻烦。下面使用常规方式和使用Runtime两种方式进行比较,然后总结一下中间遇到的坑。 1.常规方法做归档与解档 //自定义Person类继承自NSObject .h文件 @interface Person : NSObject<NSCoding> @property(nonatomic,strong) NSString * name;//名字 @propert

u013712343的博客 768

Halcon阈值算子 -- 局部阈值之dyn_threshold

Halcon阈值算子 – dyn_threshold HALCON有很多阈值算子,接下来将一一介绍。本文先介绍dyn_threshold。 以下介绍主要参考HALCON帮助文档,并加上自己的体会。如有纰漏,欢迎留言指出 理论介绍 dyn_threshold算子的函数签名如下: dyn_threshold(OrigImage, ThresholdImage : RegionDynThresh : Offset, LightDark : ) 输入参数有: OrigImage:待处理图像 ThresholdIm

m0_47015717的博客 5382

EG800K 4G模块AT指令避坑指南:让你的STM32物联网项目稳定连接云端

本文详细解析了EG800K 4G模块在STM32物联网项目中的AT指令应用避坑指南,涵盖从底层协议到云端稳定的全链路优化策略。通过实战案例和防护机制,帮助开发者解决常见通信陷阱,提升云端通信的稳定性和效率。

weixin_26834815的博客 288

iOS Codable 和 NSCoding协议,以及归档,JSON编码

iOS Codable 和 NSCoding协议,以及归档,JSON编码

Lee优快云77的博客 1352

CentOS 7环境下GLPI与OCS Inventory资产管理系统集成部署指南

本文详细介绍了在CentOS 7环境下,如何将GLPI与OCS Inventory两大开源工具进行集成部署,构建自动化资产管理系统。指南涵盖环境准备、核心服务安装、Web界面初始化、OCS插件配置及资产同步实战,帮助运维人员实现IT资产的自动发现、统一管理与可视化,大幅提升资产管理效率。

weixin_29274337的博客 326

编码解码-NSCoding协议

在oc中,我们可以对NSString,NSArray,NSDictionary,NSDate,NSNumber,对象进行编码解码操作,但是当我门要对自定义的类的对象进行编码解码时该怎么做呢,这时候就要用到NSCoding协议了, NSCoding协议的方法 - (void)encodeWithCoder:(NSCoder *)aCoder; - (nullable inst

DY_blog的专栏 755

实战指南:Qwen3-ASR-1.7B 语音识别

本文介绍了Qwen3-ASR语音识别模型的安装与使用。

举世誉之而不加劝,举世非之而不加沮,定乎内外之分,辩乎荣辱之境,斯已矣。 1803

Android16 RK3576修改亮度调节为线性调节

文章摘要: 本文分析了Android系统中亮度调节的非线性问题,并提供了线性化改造方案。首先通过追踪Settings和SystemUI代码,发现亮度调节使用了BrightnessUtils类中的非线性Gamma空间转换算法。然后重点修改了BrightnessUtils类,将原有的Hybrid Log Gamma(HLG)算法替换为简单的线性映射公式。最后在自定义工具窗口中实现了基于系统标准接口的亮度调节功能,通过SeekBar的0-100%百分比值线性映射到1-255的系统亮度值。改造后的亮度调节更加直观,

tzj1058756809的博客 75

【iOS数据持久化】偏好设置(UserDefaults)

官网文档:NSUserDufaultClass Reference 关于偏好设置:AboutPreferences and Settings UserDefualts是一种便利的,通过key-value的一种持久化方案。 常用于存储应用相关的用户设置,自定义个性化设置,首次使用引导等。适合于简单数据小量储存,涉及记住密码和隐私,建议采用keyChain。 偏好设置以plist文件形式存储在应用沙盒的Preferences目录下,文件名:bundleId.plist 对于 Swift 来说 UserDefua

小桥流水哗啦啦,iOS Coder 哒哒哒 3329

汇川Easy系列PID_AT指令弹簧质量阻尼系统闭环控制仿真测试

汇川Easy系列PLC系统PID指令(温度控制PID应用编程)

RXXW_Dor的博客 759

NSCoding和NSSecureCoding

NSCodingNSCoding is a protcol that you can implement on your data classes to support encoding and decoding your data into a data buffer, which can then be persisted to disk.如果想把自定义的对象持久化(存到硬盘),或者用于网络传...

weixin_34247299的博客 1446

以 Cloud 为核心的设备 mTLS 证书体系:从产品需求到 OP-TEE 安全落地

本文探讨了以云端为核心的物联网设备mTLS证书体系构建方案。文章从产品需求出发,分析了云端必须采用mTLS+证书体系管理设备身份的原因,指出静态Token方案的三大缺陷:身份不可控、运营不可控和审计不可控。重点阐述了mTLS在产品中的核心功能是加密传输和双向认证,并详细列出了云端PKI、设备注册中心等必备组件。在设备侧,强调必须通过OP-TEE技术保护私钥安全,提出了一个包含密钥生成、CSR导出等功能的TA设计方案。最后,文章给出了云端端到端流程示例,说明如何将证书生命周期管理转化为可运营的产品能力,包括自

Interview_TC的博客 639

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

NSCopying,NSCoding

NSCopying protocol 实现对象复制功能,在对象接收到copy消息后copyWithZone会被调用,在此方法中应创建一个新的同类型对象,并且设备其所有属性后返回,创建该新对象时需要使用allocWithZone方法,该方法可以通过一个已经指定分配好的内存创建新的对象,即当以下方法被调用时内存已分配完毕,将通过NSZone对象封装传递过来。同样的有NSMutableCopying来处

slatop 1471

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

iOS SDK详解之NSCoding协议

原创blog,转载请注明出处 http://blog.youkuaiyun.com/hello_hwc?viewmode=contents 欢迎关注我的iOS SDK详解专栏 http://blog.youkuaiyun.com/column/details/huangwenchen-ios-sdk.html前言:NSCoding是对iOS中的Model类进行编码和解码必须要遵循的协议,如果一个对象要被归档,那么这个

Leo的专栏 5749

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Swift 中的结构体与 NSCoding

正如大家所知,Swift 中的结构体不遵守 NSCoding 协议。NSCoding 只适用于继承自 NSObject 的类。 可是结构体在 Swift 中的地位与使用频率都非常高,因此,我们需要一个能将结构体的实例归档和解档的方法。Janie 写过在 Sonoplot 工作时,他们团队对此的解决方法。简而言之,他们定义了一个拥有两个方法的协议:一个方法可以从结构体当中获得一个 NSDiction...

renyingcai520的博客 1394

IOS开发NSCoding

NSCoding 官方解释: A protocol that enables an object to be encoded and decoded for archiving and distribution. 为存档和分发而对对象进行编码和解码的一种协议。 NSCoding是把数据存储在iOS和Mac OS上的一种极其简单和方便的方式,它把模型对象直接转变成一个文件,然后再把这个文件重新加载到内存里,并不需要任何文件解析和序列化的逻辑。如果要把对象保存到一个数据文件中(假设这个对象实现了NSCo

李小源的博客 518

NSCoding

NSCoding  #define MJPath [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject] stringByAppendingPathComponent:@"stu.data"] - (IBAction)save {  

冰冻三尺,非一日之寒 380

runtime 实现nscoding

nscoding runtime

发飙的蜗牛 505

NSCoding 与归档解档

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

鹏仔的技术博客 513

NSCopying NSCoding

NSCopying 协议有一个 方法 - (id)copyWithZone:(NSZone *)zone { } 代表复制一块本身的内存区域,如果要复制本身的属性等别的不属于内存的东西,需要重写这个方法,另外做操作 NSCoding 用于把一个NSObject 和它的属性NSString、NSNumber 等序列化,使之可以一起存入本地,并且从本地读取

AndYouAndMe的专栏 702

数据持久化之NSCoding/NSKeyed​Archiver

原文点这儿 在构建应用程序时,一个重要的架构决策问题是在每次启动之间如何持久化数据。问题是如何精准的重现最后一次关闭应用前的状态;如何描述对象图以使下次完美地重新构建。 在 iOS 和 OS X 上, 苹果提供了两种选择 :Core Data 或 NSKeyedArchiver / NSKeyedUnarchiver (用来将遵循  的类序列化) 或者更确切地说:有三种选择,如果

Le_Wrynn的博客 659

NScoder和NScoding简析

NScoder  和 NScoding 有将自己定义的类的对象写入磁盘的作用 NScoding 是一个协议,主要有下面两个方法 -(id)initWithCoder:(NSCoder *)coder;//从coder中读取数据,保存到相应的变量中,即反序列化数据 -(void)encodeWithCoder:(NSCoder *)coder;// 读取实例变量,并把这些数据写到c

Eric_xchen的专栏 1560

NSCopying、NSCoding

NSCopying: 如果要调用一个对象的copy方法,这个对象必须遵循NSCopying的协议。这个协议中规定了一个方法:- (id)copyWithZone:(NSZone *)zone;我们就是通过实现这个方法给对象提供拷贝的功能。对于很多现有类,如NSString,NSDictionary,。。。这个方法已经实现。假设我们现在自定义了一个类,需要为这个类提供拷贝的功

1823
上一篇: NSCoding初步认识
下一篇: Core Animation 之 CALayer
学习笔记666
博客等级 码龄12年 1047粉丝 1369原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值