问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

ios 怎么用runtime来动态传值修改属性

发布网友 发布时间:2022-04-22 15:49

我来回答

1个回答

热心网友 时间:2023-10-03 02:10

首先定义一个类
#import@interface Person : NSObject
@property (assign, nonatomic) NSInteger age;
-(void)run;
@end

#import "Person.h"
@implementation Person
-(void)run{
NSLog(@"%s",__func__);
}
@end

定义分类
#import "Person.h"
@interface Person (Extention)
@property (copy, nonatomic) NSString *name;
-(void)saySex;
@end
#import "Person+Extention.h"
#import <objc/runtime.h>
@implementation Person (Extention)
//定义常量 必须是C语言字符串
static char *PersonNameKey = "PersonNameKey";
-(void)setName:(NSString *)name{
/*
OBJC_ASSOCIATION_ASSIGN; //assign策略
OBJC_ASSOCIATION_COPY_NONATOMIC; //copy策略
OBJC_ASSOCIATION_RETAIN_NONATOMIC; // retain策略

OBJC_ASSOCIATION_RETAIN;
OBJC_ASSOCIATION_COPY;
*/
/*
* id object 给哪个对象的属性赋值
const void *key 属性对应的key
id value 设置属性值为value
objc_AssociationPolicy policy 使用的策略,是一个枚举值,和copy,retain,assign是一样的,手机开发一般都选择NONATOMIC
objc_setAssociatedObject(id object, const void *key, id value, objc_AssociationPolicy policy);
*/

objc_setAssociatedObject(self, PersonNameKey, name, OBJC_ASSOCIATION_COPY_NONATOMIC);
}
-(NSString *)name{
return objc_getAssociatedObject(self, PersonNameKey);
}
-(void)saySex{
NSLog(@"%s----%@",__func__,self);
}

@end

总结:在分类中@property不会生成_变量,也不会实现getter和setter方法,我们可以手动实现如下
-(NSString *)name{
return @"name";
}
-(void)setName:(NSString *)name{

}

但是这样是没什么意义的,而且分类中不允许定义变量,所以只能用runtime类实现
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
绿茶要猛冲吗,绿茶鲜嫩不需要(绿茶冲泡的正确方式) 绿茶为什么越好越不耐泡 绿茶要泡几泡?哪种绿茶最耐泡? 哪种绿茶最耐泡 职场故事:美女职员遇到暴躁老板 老板脾气坏得要命,我该怎么办 老板老爱发脾气,我们应该怎么做呀? 害怕老总发脾气怎么办 网络上用名字测和另一个人的关系准确吗 一个男生把自己的名字和另一个人的名字放在一起,中间放个"&amp;"符号... IOS工程中如何去掉第三方的警告 ios uibutton怎样去掉高亮透明效果 ios 怎么做到每个页面都有侧滑栏 除了广东梅州,哪里还盛产柚子? ios oc的动态识别是指什么 梅州 哪些镇 哪些村 柚子园最多? 详细点谢谢啦 急 ios copy和strong的区别 多少人知道ios app里点击屏幕上边沿让页面滚回顶部 iOS 协议问题 iOS 怎样才能做到多次点击只跳转一次 怎样降低iOS代码耦合性 如何在 iOS 中解决循环引用的问题 ios 自定义对象怎么去除重复 ios property 属性有哪些修饰符 有什么作用 香港恒生账户被银行注销怎么办 近期被账户被恒生银行冻结限制服务的看这里。 梅州五华茶亭岗柚子特点? 香港恒生银行公司账户收到注销新,会马上被注销吗 香港恒生银行冻结账户说的行政原因是什么意思 恒生电子有没有被立案调查 阴阳师手游全平台区安卓玩家开的阴阳寮,ios玩家能进入吗?互通吗 ios 怎么给read-only属性复制 iOS 怎么获取短信验证码 怎么在ios开发中使用opengl iOS通知和KVO的区别和用法 怎样查找电脑中的视频文件 如何才能搜索出电脑内的所有视频文件? 怎样快速搜索存在电脑上的视频 怎么查找笔记本电脑里面的视频 什么是腊月日? 如何快速找出电脑上的电影和视频文件? 腊月廿四是什么意思 如何看电脑播放记录 腊月二十七是什么日子 腊月二十四是什么节日? 腊月是几月几日? 腊月初一是什么节日 请问农历腊月二十四是什么节日.? 一月到十二月怎么称呼 腊月初一是什么日子?