#import <Foundation/NSObjCRuntime.h>
#import <objc/runtime.h>
- (NSString *)serializeObject:(id)theObject
{
NSString *className = NSStringFromClass([theObject class]);
const char *cClassName = [className UTF8String];
id theClass = objc_getClass(cClassName);
unsigned int outCount, i;
objc_property_t *properties = class_copyPropertyList(theClass, &outCount);
NSMutableArray *propertyNames = [[NSMutableArray alloc] initWithCapacity:1];
for (i = 0; i < outCount; i++) {
objc_property_t property = properties[i];
NSString *propertyNameString = [[NSString alloc] initWithCString:property_getName(property) encoding:NSUTF8StringEncoding];
[propertyNames addObject:propertyNameString];
[propertyNameString release];
NSLog(@"%s %s\n", property_getName(property), property_getAttributes(property));
}
NSMutableDictionary *finalDict = [[NSMutableDictionary alloc] initWithCapacity:1];
for(NSString *key in propertyNames)
{
SEL selector = NSSelectorFromString(key);
id value = [theObject performSelector:selector];
if (value == nil)
{
value = [NSNull null];
}
[finalDict setObject:value forKey:key];
}
[propertyNames release];
NSString *retString = [[CJSONSerializer serializer] serializeDictionary:finalDict];
[finalDict release];
return retString;
}
分享到:
相关推荐
在iOS开发中,反射机制是一种强大的工具,它允许程序在运行时检查对象的类型和属性,甚至能够根据字符串形式的类名动态地创建和操作对象。这种机制在很多场景下非常有用,比如处理未知类型的对象、实现通用的序列化...
由本群【天空air_as3_北京】分享的关于反射理论的Demo 可以帮助理解反射的用法和原理
本示例"iOS反射Demo"着重展示了如何利用反射来处理从爱邦公交API获取的复杂JSON数据,并将其自动解析为对象。 首先,我们了解下反射的概念。反射在Objective-C中主要通过`NSClassFromString`函数和`...
"ios-JS_OC反射交互.zip" 提供的方案是通过反射机制来实现JS和OC之间的通信,使得我们可以捕获JavaScript发起的URL请求,然后解析其中的信息,通过反射执行OC中的对应函数,无需手动编写大量的条件判断来处理每个...
1. **原生平台反射机制**:原生平台反射机制允许JavaScript代码与原生iOS或Android应用的底层代码进行通信。这通常是通过桥接技术实现的,比如JavaScriptCore(iOS)或Java/Native Interface(JNI,Android)。反射...
这意味着传统意义上的热更新方法(如Android上的反射机制)在iOS上无法实现。因此,Unity应用的iOS热更新通常采用Unity+Lua插件的方式。 ##### Android与iOS热更新的异同 - **Android热更新**: - 将执行代码预...
6. **反射(Reflection)**:类似于Java的反射机制,Runtime可以让我们在运行时检查类的信息,比如获取类的所有属性、方法等,这在编写通用代码或者元编程时非常有用。 7. **动态加载类和Category**:Runtime支持在...
- **反射**:KVC提供了一种动态访问对象属性的方式,常用于反射机制。 - **自动化测试**:在单元测试中,可以使用KVC快速检查对象的属性值。 ### 4. KVC与KVO(Key-Value Observing) KVC虽然提供了属性访问的灵活...
本章将全面介绍iOS 4中的内存管理机制,包括引用计数、垃圾回收等内容。通过学习这些知识,开发者可以更好地控制应用的内存使用情况,从而提高应用的整体性能和稳定性。 通过阅读《iOS 4 Programming Cookbook》这...
在FMDatabase的基础上面扩展了一个利用反射机制来新建数据库字段,无需写任何SQL语句,创建表不需要写,增删改查也不需要,只要继承接口然后给个主键及表就可以进行数据库操作,十分方便。 作者注:里面我有写了一个...
4. **图层组合与复合**:学习如何通过图层的组合和复合操作来实现更复杂的视图效果,如遮罩、模糊、反射、阴影等。 5. **离屏渲染与图层优化**:理解离屏渲染的机制,知道何时会触发离屏渲染,以及如何避免或优化离...
Objective-C runtime是一个动态的C语言库,它为OC提供了消息传递、类反射、元数据等机制,使得OC具备了强大的动态性。当我们谈论“iOS runtime底层框架原码”时,实际上是在探讨OC runtime的实现细节和内部工作原理...
4. **注入代码**:最后,通过反射、消息转发或者其他机制,将自定义框架中的代码插入到目标应用的执行流程中。例如,在Objective-C中,可以通过KVC(Key-Value Coding)或Category来修改类的行为。 **注意事项与...
2. 动态属性操作:在运行时动态获取或设置对象的属性,如反射。 3. JSON序列化和反序列化:将JSON数据转换为对象模型时,KVC能简化处理过程。 ### KVO(Key-Value Observing) KVO是一种观察者模式的实现,允许一...
6. 多线程:创建和管理线程,同步机制如synchronized关键字和Lock接口。 7. Java标准库:如IO、NIO、网络编程、反射、泛型等API的使用。 8. JDBC:与数据库交互,执行SQL语句。 9. 设计模式:常见23种设计模式在实际...
- **EBGP路径选择**:对比了Cisco IOS和JUNOS软件中EBGP路径选择机制的异同。 #### 服务访问限制 为了增强网络安全性和控制访问权限,本文档还讨论了如何在Cisco IOS和JUNOS软件中配置访问限制。 - **Cisco IOS...
Objective-C的消息传递机制是基于运行时的。当我们调用一个方法时,实际上是向对象发送一条消息。如果对象不响应该消息,系统会按照特定顺序处理未找到的方法,即消息转发。 4. **消息转发(Message Forwarding)*...
在本例中,我们将重点讨论Objective-C的反射机制。 首先,我们要创建一个数据模型类,比如`User`,包含一些属性,如`name`、`age`等。为了让这个类能自动与数据库交互,我们需要使用`LKDBHelper`,这是一个流行的轻...
其次,Runtime提供了强大的反射能力。通过Reflection,我们可以在运行时获取类的信息,如类名、属性、方法等,甚至可以动态地创建、修改和调用对象。这对于编写元编程(Metaprogramming)或者调试工具非常有用。 在...
Objective-C的对象通信基于消息传递机制。当调用一个方法时,实际上是向对象发送一条消息。Runtime负责查找对应的方法实现并执行。如果找不到对应的方法,Runtime会调用`forwardInvocation:`进行处理,或者抛出异常...