Runtime-分类,修改私有属性,KVC

iOS13 禁止textfield通过KVC获取和修改私有属性 UITextField 在ios 13之前,UITextField可以通过KVC修改属性 //字体颜色 [textField setValue:[UIColor whiteColor]forKeyPath:@_placeholderLabel.textColor]; //字体大小 [textField setValue:[UIFont boldSystemFontOfSize:16] forKeyPath:@_placeholderLabel.font]; //水平居中 [textField setValue:[NSNumber numberWithInteger:NSTextAl 立即下载
  1. 1、字体适配思路

写个UIFont(category),在category里面重写+(void)load方法,采用method_exchangeImplementations 进行方法替换,具体代码如下操作:

///自定义字体,缩放等相关适配信息
+ (UIFont *)custom_systemFontOfSize:(CGFloat)fontSize{
    //获取设备屏幕宽度,并计算出比例scale
    CGFloat width = [[UIScreen mainScreen] bounds].size.width;
    CGFloat scale  = width/375.0;
    //注意:系统的方法名已变成了自定义的方法名
    return [UIFont custom_systemFontOfSize:fontSize * scale];
}

//重写
+ (void)load{
    //获取系统方法
    Method sytemMethod = class_getClassMethod([UIFont class], @selector(systemFontOfSize:));
    //获取自定义方法
    Method customMethod = class_getClassMethod([UIFont class], @selector(custom_systemFontOfSize:));
    //交换
    method_exchangeImplementations(sytemMethod, customMethod);
}

2、制作比较细腻的引导层,一般引导层,直接在window上加个UIView搞就完事了,做好适配就行

新增category,通过objc_setAssociatedObject,objc_getAssociatedObject来动态添加UIView引导属性,这样可以把业务逻辑分离的比较清晰一些,需要提前设计好引导层,否则坐标位置处理麻烦

3、修改私有属性

首先定义一个测试类

///.h文件
@interface ModifyPrivateProperty : NSObject

@end
///.m文件
#import "ModifyPrivateProperty.h"

@implementation ModifyPrivateProperty
{
    //私有属性
    NSString *name;
}
@end

3.1 通过KVC修改私有属性值

 ModifyPrivateProperty *target = [ModifyPrivateProperty new];
 [target setValue:@"123" forKey:@"name"];
 NSLog(@"target private name value:%@",[target valueForKey:@"name"]);

打印结果如下:

OCTest[7557:961519] target private name value:123

3.2通过Runtime修改私有属性

ModifyPrivateProperty *target = [ModifyPrivateProperty new];
unsigned int count;
Ivar *props = class_copyIvarList([target class], &count);
for (int i =0; i<count; i++) {
   Ivar prop = props[i];
   const char * key = ivar_getName(prop);
   if (strcmp(key, "name") == 0) {
       object_setIvar(target, prop, @"123");
   }
}
NSLog(@"target private name value:%@",[target valueForKey:@"name"]);

打印结果如下:

OCTest[7666:983222] target private name value:123

更多精彩内容请关注公众号

大宗农产品交易知识图谱推理引擎的构建--需求分析 大宗农产品交易知识图谱推理引擎的构建 一、项目概述 ​ 进入信息时代,全球产生的数据量爆炸式增长,一方面数据产生的方式发生改变,由手工产生越来越多地转为自动化生成,另一方面,人类的活动也越来越依赖数据;民以食为天,粮食方面的信息数据对人类来说至关重要,而当前繁杂的数据已经超出了人工处理的范围,这就对数据采集和数据处理提出了新的要求。 知识图谱是将大量收集的数据整理成机器能处理的知识库,并实现可视化的展示。知识图谱本质上是一种大规模的语义网络,其主要目的是对真实世界里的实体或概念之间的关联关系进行描述;构造 阅读详情

相关推荐

深度学习中的注意力机制

最近两年,注意力模型(Attention Model)被广泛使用在自然语言处理、图像识别及语音识别等各种不同类型的深度学习任务中,是深度学习技术中最值得关注与深入了解的核心技术之一。本文以机器翻译为例,深入浅出地介绍了深度学习中注意力机制的原理及关键计算机制,同时也抽象出其本质思想,并介绍了注意力模型在图像及语音等领域的典型应用场景。

优快云人工智能 4万+

iOS运行时runtime获取私有属性和强制更改私有属性,以及获取私有方法

OC是运行时语言,只有在程序运行时,才会去确定对象的类型,并调用类与对象相应的方法。利用runtime机制让我们可以在程序运行时动态修改类、对象中的所有属性、方法,就算是私有方法以及私有属性都是可以动态修改的。本文旨在对runtime的部分特性小试牛刀,更多更全的方法可以参考系统API文件,demo例子可以参见优快云的runtime高级编程系列文章。 废话少说,上代码: 先看一个Pe

抬头看山,低头看路! 1万+

本体研究综述(转)

(这篇文章是从http://imarine.blog.163.com/中转载过来的,个人觉得对本体的介绍比较全面!)本体综述本体作为一种能在语义和知识层次上描述领域概念的建模工具,其目标是捕获相关领域的知识,确定该领域内共同认可的词汇,通过概念之间的关系来描述概念的语义,提供对该领域知识的共同理解。语义Web(the Semantic Web)是在本体理论基础之上对现有Web所进行的扩展[

zhenshideni611的专栏 1838

iOS项目字体自动适配的修改

进入公司后接到一个项目,项目是按照苹果6的界面开发,字体的标注完全按照苹果6的像素来设定的,但是有一个问题,程序员写的字体大小不能按照界面的大小适配,拿到代码后要修改字体,如果一个一个的修改,工程量就非常大,于是就想到用runtime来动态改变字体大小,这样节约了大量的时间,runtime在这里就不过多的叙述,可以到网上了解,现附上代码以备后用: #import "UIFont+myFont.h

奔跑的蜗牛 1729

CANoe.Diva实战:基于CDD的UDS诊断自动化测试全流程解析

本文详细解析了使用CANoe.Diva进行基于CDD的UDS诊断自动化测试的全流程,包括环境搭建、CDD文件配置、测试范围设置、用例生成与验证、CANoe集成测试及报告分析。通过实战经验分享,帮助工程师快速掌握诊断自动化测试技巧,提升测试效率与质量。

weixin_29258297的博客 221

Keil AC6编译器独立安装与配置指南:不升级Keil MDK也能用上新工具链

本文详细介绍了如何在不升级Keil MDK的情况下独立安装和配置Arm Compiler 6(AC6),帮助嵌入式开发者充分利用AC6的编译速度、代码密度和现代语言支持优势。通过零侵入式解决方案,开发者可以在现有环境中灵活切换编译器版本,提升开发效率。

weixin_30872157的博客 557

ios 通过runtime 获取属性列表并修改变量值

JSONModel第三方框架, 向服务器发起一个请求, 返回后的数据直接就是一个可用的Model。 其中核心技术使用的便是runtime的反射机制,通过runtime将解析好的json数据直接存放到了我们的对象模型中。 以下为自己写的一个测试demo,实现了获取属性列表并进行改值。 /** 获取属性列表 */ -(void)getProperties{ u_int count =

红颜的博客 8879

《Swin-Unet: 类Unet的纯Transformer架构用于医学图像分割》学习笔记

近年来,卷积神经网络(CNN)在医学图像分析领域取得了重要进展。尤其是基于U形架构和跳跃连接的深度神经网络广泛应用于各种医学图像任务。然而,尽管CNN表现优异,但由于卷积操作的局部性,其难以很好地学习全局和长距离语义信息的交互。在本文中,我们提出了Swin-Unet,一种用于医学图像分割的类Unet纯Transformer模型。被切分为Token的图像块输入到基于Transformer的U形编码器-解码器架构中,通过跳跃连接实现局部和全局语义特征的学习。

学无止境。 5550

iOS runtime修改类的属性

JrmfWalletSDK *p = [JrmfWalletSDK new]; // IVar是runtime声明的一个宏 unsigned int count = 0; //count记录变量的数量 // 获取类的所有属性变量 Ivar *members = class_copyIvarList([JrmfWalletSDK class], &am...

weixin_30768661的博客 370

ANSYS Fluent 2023R2实战:用欧拉多相流模型搞定流化床模拟(附详细参数避坑)

本文详细解析了ANSYS Fluent 2023R2中欧拉多相流模型在流化床模拟中的应用,包括模型选择、材料属性设置、相间作用力配置及初始化技巧。特别针对高颗粒浓度工况提供参数优化方案,帮助工程师提升模拟精度与效率,适用于化工、能源等领域的流化床反应器设计。

weixin_30938149的博客 270

【WRF-GHG 教程上】完整教程(2024年更新版)

完整教程(2024年更新版)

WW、forever的博客 1437

runtime获取属性列表,修改属性值,添加并修改私有方法的调用

用了两天好好的研究了一下runtime,之前初涉runtime。懵懵懂懂的了解runtime的强大,但是如何的强大,只是在demo中引用MJExtension的时候自动生成model,了解了一些。 经过一天半的研究,首先温习了之前的获取属性列表。今天想说的具体功能如题所述。主要涉及的就是获取并修改属性。添加并修改私有方法。好了,首先说一下如何获取属性值。如果需要获取某个属性,我们最先需要知道你想获

飞落的眼泪的专栏 3344

ADRC自抗扰算法优化(PLC梯形图篇)

ADRC自抗扰算法PLC梯形图完整源代码请参看下面博客文章:ADRC自抗扰控制算法(含梯形图完整源代码和算法公式)_adrc算法_RXXW_Dor的博客-优快云博客PLC的自抗扰控制(ADRC)算法_RXXW_Dor的博客-优快云博客_adrc算法1、自抗扰控制算法,网上很多文章有所讲解,大家也可以关注韩京清教授的论文和书籍,这里就不赘述了,下面给出梯形图+SCL代码。

RXXW_Dor的博客 2284

iOS开发中访问并修改一个类的私有属性

在OC中的类会有某些私有属性,这些属性通常写在.m文件中或在.h文件中用@private关键字进行修饰。某些类之所以有某些私有属性是因为不想这些属性被外界访问并修改。但我们仍能对私有属性进行访问和修改。访问以及修改私有属性有两种方式:KVC、runtime。 1.KVC 我们可以用setValue:的方法设置私有属性,并利用valueForKey:的方法访问私有属性。假设我们有一个类Perso

梁森的博客 5104

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

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

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

如何访问并修改一个类的私有属性?

三种方式供你选择 通过KVC来设置 通过runtime动态改变 通过 msg_send() 设置 例子: 有这样一个类 PrivateVariablesClass: @interface PrivateVariablesClass () @property (nonatomic, assign) NSInteger priviteNum; @property (nonatomic, s...

ZhaiAlan的博客 1733

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

iOS中访问和修改一个类的私有属性

访问和修改类的私有属性由一下两种方法实现: 1.通过KVC获取 2.通过runtime访问并修改 定义Person类: .h文件 #import @interface Person : NSObject @property (nonatomic, strong) NSString *name; -(void)sayHello; @end .m文件 #impor

chermon_love15的博客 1989

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

ios 通过kvc修改属性会触发kvo_底层原理 - KVO/KVC

底层原理 - KVO/KVC一、KVO1、概述KVO的全称是KeyValueObserving,俗称“键值监听",可以用于监听某个对象属性值的改变;KVO是苹果提供的在套事件通知机制。KVO和NSNotificationCenter都是iOS中观察者模式的一种实现,区别是:NSNotificationCenter可以是一对多的关系,而KVO是一对一的;2、KVO的使用使用KVO分为三个步骤:1、注...

weixin_39541121的博客 1050

java修改私有属性值,访问或修改一个类的私有属性

方法一:KVC(键值编码)定义Person类.h文件@interface Person : NSObject@private//name为私有属性@property (nonatomic, copy) NSString *name;@end.m文件@implementation Person@end在某控制器中访问或修改Person类的私有属性name首先记得引入头文件,然后看下面具体实现@imp...

weixin_33277412的博客 1711

iOS —— KVC

一、介绍 KVC全称是Key Value Coding(键值编码),是可以通过对象属性名称(Key)直接对属性值(value)编码(coding)“编码”可以理解为“赋值及访问”。而不需要调用明确的存取方法。这样就可以在运行时动态在访问和修改对象的属性,而不是在编译时确定。KVC的优势是在没有访问器(setter、getter)方法的类中,此时点语法无法使用。KVC提供了一种间接访问其属性方法或...

cym_bj 384

Runtime——KVC,KVO原理

KVC是的缩写,意思是键值编码。在iOS中,提供了一种方法通过使用属性的名称(也就是Key)来间接访问对象属性的方法,这个方法可以不通过方法来访问对象的属性。用KVC可以间接访问对象属性的机制。通常我们使用来替代getter方法,来代替setter方法。只能用来访问当前对象的属性,而keyPath可以通过当前对象访问属性的属性,可以一层一层套下去。...

chabuduoxs的博客 756

ios 通过kvc修改属性会触发kvo_iOS中的KVO&KVC

KVCKVC 是 Key-Value Coding 的简称,它是一种可以直接通过字符串的名字(key)来访问类属性的机制。而不是通过调用Setter、Getter方法访问。KVC 机制是由 NSKeyValueCoding 协议定义的。赋值、取值流程KVC取值KVC赋值常用API// 取值open func value(forKey key: String) -> Any?open...

weixin_39769039的博客 444

如何修改类的私有属性,设置属性值?

有两种方法可以访问私有属性,一种是通过KVC,一种是通过runtime访问并修改私有属性。 方法一: // Model.m #import "Model.h" @interface Model () // 私有属性 @property (nonatomic, strong) NSString *name; @end ViewController.m - (void)viewDidL...

小菜媛的博客 3048

Runtime应用之归档 , KVC , 分类添加属性

1.归档中用到的Runtime,类的属性较多的时候用着比较方便,不用写那么多代码#import <Foundation/Foundation.h> #import <UIKit/UIKit.h> @interface Person : NSObject<NSCoding> @property (nonatomic ,assign)CGFloat height; @property (nonatomi

FreeTourW的博客 731

KVC

1、概念: KVC(Key-value coding):键值对编码,也就是我们可以通过变量的名称来读取或者修改它的值,而不需要调用明确的存取方法。这样就可以在运行时动态地访问和修改对象的属性。而不是在编译时确定。对于类里的私有属性,Objective-C是无法直接访问的,但是KVC是可以的。 作用: 取值和赋值(开发中基本不用) 获取对象私有变量的值.(经常使用,例如UIPageCon...

weixin_30650039的博客 409

KVC实现原理以及使用实践

KVC(Key-value coding)键值编码,简单来说,是可以通过对象属性的名称(Key)直接给属性值(value)编码(coding)“编码”也可以理解为“赋值”。这样可以免去我们调用getter和setter方法,从而简化我们的代码,也可以用来修改系统空间内部属性。1、最简单的使用例子(1)假设有CYXModel类与CYXShopModel类,CYXModel里面有name、produc...

陈荣科的博客 2311

KVC的理解、与runtime结合应用及其底层原理

一、KVC的概念理解及常用方法概念KVC(Key-Value Coding)顾名思义,就是键值编码的意思。 在iOS中,KVC就是通过使用属性的名称间接性来访问属性的方法,通俗一点的理解就是可以通过对象属性名称(Key)直接给属性值(Value)编码(Coding)“编码”可以理解为“赋值”。这个方法可以不通过getter/setter方法来访问对象的属性。因为一个类的成员变量如果没有提供gett

信者的路 1195
上一篇: ibd数据恢复
下一篇: Runtime-消息转发详解
coding_most
博客等级 码龄15年 13粉丝 38原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值