iOS反射机制:objc_property_t的使用
#import <objc/runtime.h>
需要导入这个头文件。
- 动态获取一个自定义类对象中的所有属性
1234567891011121314151617
- (
NSDictionary
*)allProperties
{
NSMutableDictionary
*props = [
NSMutableDictionary
dictionary];
unsigned
int
outCount, i;
objc_property_t *properties = class_copyPropertyList([
self
class
], &outCount);
for
(i = 0; i<outCount; i++)
{
objc_property_t property = properties[i];
const
char
*char_f =property_getName(property);
NSString
*propertyName = [
NSString
stringWithUTF8String:char_f];
id
propertyValue = [
self
valueForKey:(
NSString
*)propertyName];
if
(propertyValue)
[props setObject:propertyValue forKey:propertyName];
}
free(properties);
return
props;
}
- 实现对象的自动赋值
123456789101112131415161718192021222324252627
- (
BOOL
)reflectDataFromOtherObject:(
NSObject
*)dataSource
{
BOOL
ret =
NO
;
//propertyKeys 其实就是上面的方法的变形,上面方法回传一个可变字典,这里是得到一个可变数组的一个处理
for
(
NSString
*key in [
self
propertyKeys])
{
if
([dataSource isKindOfClass:[
NSDictionary
class
]])
{
ret = ([dataSource valueForKey:key]==
nil
)?
NO
:
YES
;
}
else
{
ret = [dataSource respondsToSelector:
NSSelectorFromString
(key)];
}
if
(ret)
{
id
propertyValue = [dataSource valueForKey:key];
//该值不为NSNULL,并且也不为nil
if
(![propertyValue isKindOfClass:[
NSNull
class
]] && propertyValue!=
nil
)
{
[
self
setValue:propertyValue forKey:key];
}
}
}
return
ret;
}
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
· PostgreSQL 和 SQL Server 在统计信息维护中的关键差异
· C++代码改造为UTF-8编码问题的总结
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· 【.NET】调用本地 Deepseek 模型
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
· 上周热点回顾(2.17-2.23)
· 如何使用 Uni-app 实现视频聊天(源码,支持安卓、iOS)