Runtime--将信息对象归档解档

把 SAP Fiori Launchpad 配置文件放进 MIME Repository:从上传、缓存控制到可访问路径的完整实践 文章摘要: 在 SAP Fiori 项目中,Launchpad 配置文件的部署是关键挑战,核心在于通过 MIME Repository 而非直接修改标准文件来实现稳定配置。与 BSP Repository 相比,MIME Repository 支持显式设置客户端缓存时间(如 SAP 推荐的 7 天),适合生产环境治理。配置文件需为 JSON 格式,部署时需确保路径可访问(通过 ICF node 和 external alias),并注意语法错误会导致静默失效。实操步骤包括:在 SE80 中创建专用目录、设置 阅读详情

当我们需要将一个对象进行归档时,都要让该对象的类遵守NSCoding协议,再实现归档和接档方法。例如有一个Person类,该类有两个成员变量

1
2
@property (nonatomic,copy) NSString *name;
@property (nonatomic,assign) int age;

两个协议的实现方法如下

复制代码
/**
 *  将对象写入某个文件时需要调用,在该方法中说明哪些属性需要存储
 */
- (void)encodeWithCoder:(NSCoder *)encoder
{
    [encoder encodeObject:self.name forKey:@"name"];
    [encoder encodeInt:self.age forKey:@"age"];
}


/**
 *  从文件中解析对象时会调用,在该方法中解析对象的属性
 */
- (id)initWithCoder:(NSCoder *)decoder
{
    if (self = [super init]) {
        // 解析之后要赋值给属性
        _name = [decoder decodeObjectForKey:@"name"];
        _age = [decoder decodeIntForKey:@"age"];
    }
    return self;
}
复制代码

但当该类拥有上百个属性时,那将会花费更多的功夫在重复代码上,所以使用运行时机制截取类的成员变量,进行赋值

 

例如有一个狗类Dog和它的父类动物类Animal

狗类的成员变量有

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

 

动物类的成员变量有

@property (nonatomic,assign) double weight;

 

当我们需要将狗对象进行归档时,可以在类中这样重写归档和解档方法

复制代码
- (id)initWithCoder:(NSCoder *)aDecoder
{
   
    if (self = [super init]) {
        Class c = self.class;
        // 截取类和父类的成员变量
        while (c && c != [NSObject class]) {
            unsigned int count = 0;
            Ivar *ivars = class_copyIvarList(c, &count);
            for (int i = 0; i < count; i++) {
               
                NSString *key = [NSString stringWithUTF8String:ivar_getName(ivars[i])];
               
                id value = [aDecoder decodeObjectForKey:key];
               
                [self setValue:value forKey:key];

            }
            // 获得c的父类
            c = [c superclass];
            free(ivar);
        }
       
       
    }
    return self;
}

- (void)encodeWithCoder:(NSCoder *)aCoder
{
   
     Class c = self.class;
    // 截取类和父类的成员变量
    while (c && c != [NSObject class]) {
        unsigned int count = 0;
       
        Ivar *ivars = class_copyIvarList(c, &count);
       
        for (int i = 0; i < count; i++) {
            Ivar ivar = ivars[i];
            NSString *key = [NSString stringWithUTF8String:ivar_getName(ivar)];

            id value = [self valueForKey:key];
           
            [aCoder encodeObject:value forKey:key];
        }
        c = [c superclass];
        // 释放内存
        free(ivar);
    }
   
}
复制代码

 

 代码测试:

复制代码
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    CXDog *d = [[CXDogalloc] init];
    d.name = @"cx";
    d.age = 12;
    d.weight = 1.55;
    // 将对象归档
    [NSKeyedArchiverarchiveRootObject:d toFile:@"/Users/c_xie/Desktop/wj.xxoo"];
    // 将对象解档
    CXDog *dog = [NSKeyedUnarchiverunarchiveObjectWithFile:@"/Users/c_xie/Desktop/wj.xxoo"];
    NSLog(@"%@,%d,%f",dog.name,dog.age,d.weight);
   
}
复制代码
LVGL colorwheel组件教程一(调色板) 【代码】LVGL colorwheel组件教程一(调色板) 阅读详情

相关推荐

机械臂TCP标定实战:从四点法到六点法的精度跃迁

本文详细解析机械臂TCP标定技术,从基础的四点法到高精度的六点法实现精度跃迁。通过工具坐标系与基坐标系的转换原理,结合实战案例展示六点法如何将装配合格率提升至99.5%,并分享环境控制、操作技巧等提升标定精度的关键要素。

weixin_29038345的博客 896

第四章 Runtime应用:实现NSCoding的自动归档和自动解档

用runtime提供的函数遍历Model自身所有属性,并对属性进行encode和decode操作。 通常系统自带的数据类型,如:字典NSDictionary,数组NSArray,字符串NSString,布尔数据BOOL,数字对象NSNumber,NSData,NSDate等可以直接进行存储操作;但是自定义的数据类型,如果直接进行存储操作时,则会抛出异常,这时候就需要进行归档、解档处理。 示例代...

番薯大佬的专栏 999

暗黑破坏神2重制版 mod制作教程(一)

暗黑2重制版mod修改教程

hhhh2312的博客 7457

Object - C运行时应用(三)——实现NSCoding的自动归档和自动解档

当我们需要将一个对象进行归档时,都要让该对象的类遵守NSCoding协议,再实现归档和接档方法。例如有一个Person类,该类有两个成员变量 @property (nonatomic,copy) NSString *name; @property (nonatomic,assign) int age; 两个协议的实现方法如下 /** * 将对象写入某个文件时需要调用,在该方法中说明哪

爱家人,爱老婆,爱生活,爱coding,爱运动的有爱青年 1267

维纳(Wiener)复原滤波器的三种推导形式及其在图像处理中的应用

本文深入解析了维纳(Wiener)复原滤波器的三种核心推导形式:卷积形式、矩阵向量形式和频域形式,并重点阐述了其基于线性最小均方误差(LMMSE)估计的核心思想。通过Python实战演示,展示了频域形式如何高效地在图像去模糊与噪声抑制之间取得平衡,是图像复原领域的经典且实用的工具。

net55的博客 578

STM32H5 USB虚拟串口:用Classic驱动移植CDC实践

USB虚拟串口(CDC)是嵌入式系统最常用的主机通信方式之一,本质是借助USB协议模拟串口收发,无需额外驱动即可在PC上生成COM口。其实现依赖USB设备协议栈完成枚举、控制传输与批量传输。传统USBD Classic库不依赖RTOS,代码轻量、调用链短,非常适合裸机或轻量状态机架构;而USBX功能强大但需要ThreadX内核,资源开销较大。在电机控制器、传感器采集等场景中,日志输出与参数配置仅需简单的双向数据通道,Classic驱动往往更务实。本文基于STM32H5平台,详细梳理了使用Classic驱动移

weixin_29178069的博客 334

Runtime应用(三)实现NSCoding的自动归档和自动解档

当我们需要将一个对象进行归档时,都要让该对象的类遵守NSCoding协议,再实现归档和接档方法。例如有一个Person类,该类有两个成员变量 @property (nonatomic,copy) NSString *name; @property (nonatomic,assign) int age; 两个协议的实现方法如下 /** * 将对象写入某个文件时需要调用,...

weixin_33859665的博客 149

华为OD机试 新系统 双机位C卷 往年真题 机考题库(持续收录中)以及算法考点详解(Python/JS/C/C++)

刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释发现新题目,随时更新。

学Java,找哪吒 5万+

iOS runtime的应用实例

一直想弄明白runtime是怎么回事,因为面试的时候这是一道必备问题,但是平时用的机会真的少之又少,我一度以为runtime只是用来装13的利器,没什么卵用。但是随着学习的增多,发现runtime真的很有用,但也没那么神秘。我相信看了我这篇博客,您对runtime肯定会有自己的理解。   先说说OC与C的对比: 1.OC是对OC的面向对象的封装,OC中的对象只是C中指向结构体的指针。 2.O

隔壁家的老黄 204

零基础教你学RDMA驱动开发--第8篇:队列对(QP)、完成队列(CQ)与工作请求(WR)机制剖析

本文深入剖析了RDMA(远程直接内存访问)中的核心机制:队列对(QP)、完成队列(CQ)和工作请求(WR)。QP作为通信端点包含发送队列(SQ)和接收队列(RQ);WR是用户提交的操作指令,转换为工作队列元素(WQE)后由网卡异步执行;CQ则提供完成通知机制。文章详细介绍了三者的协作原理,包括QP状态机、WR提交方式、CQ轮询机制,以及关键的信号控制技术(Signaled Mode)来优化性能。同时对比了SEND/RECV和RDMA WRITE两种模式的差异,提供了调试技巧和最佳实践。这些机制共同构成了RD

amy_mhd的博客 157

QT+Opencv实现视频流播放

1.流程 首先通过opencv打开视频流,获取到数据帧,然后将数据帧转换为QT可识别的图像,显示到QT界面上。 2.opencv解码线程源码 //DecodeOpencv.h #pragma once #include <QThread> #include <QObject> #include "opencv2/core/core.hpp" #include "opencv2/highgui/highgui.hpp" #include "opencv2/img..

希望能帮助大家,希望大家多多支持,你们的支持是我前进的动力。 6459

iOS_Runtime、method swizzing (俗称黑魔法) 一

本文举例说明Runtime的一下几个用途: 1、拦截并替换方法 2、给分类添加属性 3、字典转模型 4、动态添加方法,处理一个未实现方法和去除报错 5、动态设置变量的值,可设置私有属性 6、实现NSCoding协议,完成归档和解档 7、获取属性、成员变量、方法(类/实例)、协议 8、添加方法、替换原方法、交换方法 9、动态添加方法 1、在分类为系统方法添加功能 例:输出...

mikimo的博客 703

中国国家级地面气象站基本气象要素日值数据集(V3.0)

气温数据TEM, 包括站点编号(sid), 纬度(lat), 经度(long), 高程(elev), 年(year), 月(month),日(day), 平均气温(tmean), 最高气温(tmax), 最低气温(tmin)气压数据PRS, 包括站点编号(sid), 纬度(lat), 经度(long), 高程(elev), 年(year), 月(month),日(day), 平均气压(pmean), 最高气压(pmax), 最低气压(pmin)中国国家级地面气象站基本气象要素日值数据集(V3.0)

J_Giser的博客 3901

ios 缓存方式

偏好设置(NSUserDefaults)plist文件存储归档SQLite3Core Data 这里不细讲数据库,只针对性地讲讲文件存储、归档/解档、偏好设置等。 在此之前,我们需要先讲讲沙盒(Sandbox)才能继续讲解。 沙盒 每个iOS应用都有自己的应用沙盒(应用沙盒就是文件系统目录),与其他文件系统隔离。应用必须待在自己的沙盒里,其他应用不能访问该沙盒。沙盒下的目录如下: A

ZHZMAREN的博客 425

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

运行时

背景:开发的时候一般用不上,底层框架会用到运行时常用的面试题1.什么是运行时 1>运行时是一套纯C语言的API 2>利用运行时,可以做很多底层的操作, (使用命令行工具 clang -rewirte-objc xxx.m) *比如动态添加成员变量和方法 * 可以动态交换两个方法的实现(特别是交换系统自带的方法...

172

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Runtime的使用6 【归档、解档】

首先我们创建一个model类, 然后重写coder、encode。 只是为了保存这个model而已。 你也可以把dictionary等进行保存都是可以的。 @interface MMModel : NSObject @property (nonatomic, assign) NSInteger age; @property (nonatomic, copy) NSString *na

水清_木秀的博客 346

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

24、OC语言的动态性学习(Runtime)

文章目录一、动态类型二、动态绑定三、动态加载四、消息机制的基本原理消息查找阶段动态方法解析消息转发消息快转发消息慢转发消息发送以及转发机制的总结重写respondsToSelector方法代码实现动态解析快速转发慢速转发五、Method Swizzling(动态方法交换)简介使用Method Swizzling需要的几个方法Method Swizzling 使用方法Method Swizzling 简单使用Method Swizzling 方案一Method Swizzling 方案 BMethod Swi

重楼的博客 3220

iOS - runtime快速归解档

在开发中 , 通常会运用到一些全局的单例 , 保存用户的基本信息或者一些基本状态 . 这个时候可能会运用到单例来保存信息 , 保证全局获取到的都是最新的相同的信息. 并且,一般全局单例的属性较多 , 比如包括了用户的姓名,手机号,性别,城市,年龄等等众多信息.如果对该单例的各项属性进行归档, 那么得让此单例遵循协议,并实现 - (id)initWithCoder:(NSCoder *)decoder

coderMy的博客 813

iOS 对象的序列化 本地存储

用NSCoding来归档一个类1.遵守协议2归档方法3解归档方法4 归档和解归档的具体实现 ->协议方法5利用runtime将整个类的属性归档 1.遵守协议 @interface xxx : NSObject<NSCoding> 2归档方法 BOOL isSucess = [NSKeyedArchiver archiveRootObject:要归档的对象 self to...

Goods_boy的博客 687

iOS runtime详解

runtime(运行时机制) 简介 1.Runtime是一套底层的纯C语言的API,属于C语言的一个库,里面包含了很多底层的C语言的API 2.平时编写的OC代码,在程序运行过程中,其实最终都转成了runtime的C语言的代码,runtime算是OC的幕后工作者 3.比如这段OC代码: XPerson *obj = [[XPerson alloc] init]; ...

a982497155的博客 140

Objective-C 的 RunTime(四):获取类的详细信息

目录相关函数介绍获取类的:成员变量列表 && 属性列表 && 方法列表 && 所遵守的协议列表应用场景:修改私有属性应用场景:万能控制器跳转应用场景:实现字典转模型应用场景:改进归档和解档 相关函数介绍 ivar 相关函数 /* 获取成员变量的名称 @param v 要检视的成员变量 @return 一个包含成员变量名称的 C 字符串 */ const char * _Nullable ivar_getName(Ivar _Nonnull v); /*

Airths 的博客 1235

runtime 实际应用汇总

1、进入没一个界面打印这个界面的信息 扩展UIViewController,在load方法中交换viewwillAppear方法,在新方法中打印本类信息。初次接手项目时,可以通过这个方法快速熟悉项目。+(void)load { #ifdef DEBUG Method method1 = class_getClassMethod(self, @selector(newViewwillAppe

u010768881的博客 421

iOS - 数据的归档和反归档

本篇文章主要介绍利用 NSKeyedArchiver 和 NSKeyedUnarchiver 对数据进行归档和反归档的操作。

Veggie的博客 1387

runtime介绍及基本使用

1. 概念        runtime(运行时系统),是一套基于C语言API,包含在 &lt;objc/runtime.h&gt;和&lt;objc/message.h&gt;中,运行时系统的功能是在运行期间(而不是编译期或其他时机)通过代码去动态的操作类(获取类的内部信息和动态操作类的成员),如创建一个新类、为某个类添加一个新的方法或者为某个类添加实例变量、属性,或者交换两个方法的实现、获取类...

人不风流枉少年 1万+

IOS-Foundation-runtime使用举例

本人录制技术视频地址:https://edu.youkuaiyun.com/lecturer/1899 欢迎观看。上一节,我介绍了runtime的基本概念,如有不清楚的地方,请猛点这里。这一节,举例说明runtime的常用使用场合。一. 动态获取一个类的属性列表信息首先定义一个Person类,代码如下:@interface Person : NSObject @property (nonatomic,copy...

秋恨雪 1468

Runtime

Runtime概述Runtime消息传递一些概念Runtime消息转发Runtime应用 概述 Runtime的特征主要是消息(方法)传递,如果消息在对象中找不到,就进行转发 它是OC面向对象和动态机制的基石 OC是一个动态语言,这意味着它不仅需要一个编译器,也需要一个运行时系统来动态得创建类和对象,进行消息传递和转发 Runtime消息传递 一个对象的方法像这样[obj method],编译器会...

weixin_42983482的博客 290
上一篇: RunLoop UITableViewCell加载高清大图的速度优化
下一篇: iOS-MotionEffects
董其林
博客等级 码龄11年 1粉丝 21原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值