`
iaiai
  • 浏览: 2196095 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

IOS 反射机制

 
阅读更多
#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反射机制

    在iOS开发中,反射机制是一种强大的工具,它允许程序在运行时检查对象的类型和属性,甚至能够根据字符串形式的类名动态地创建和操作对象。这种机制在很多场景下非常有用,比如处理未知类型的对象、实现通用的序列化...

    IOS_反射机制的实例

    由本群【天空air_as3_北京】分享的关于反射理论的Demo 可以帮助理解反射的用法和原理

    iOS反射Demo

    本示例"iOS反射Demo"着重展示了如何利用反射来处理从爱邦公交API获取的复杂JSON数据,并将其自动解析为对象。 首先,我们了解下反射的概念。反射在Objective-C中主要通过`NSClassFromString`函数和`...

    ios-JS_OC反射交互.zip

    "ios-JS_OC反射交互.zip" 提供的方案是通过反射机制来实现JS和OC之间的通信,使得我们可以捕获JavaScript发起的URL请求,然后解析其中的信息,通过反射执行OC中的对应函数,无需手动编写大量的条件判断来处理每个...

    原生平台反射机制的消息处理-原工程

    1. **原生平台反射机制**:原生平台反射机制允许JavaScript代码与原生iOS或Android应用的底层代码进行通信。这通常是通过桥接技术实现的,比如JavaScriptCore(iOS)或Java/Native Interface(JNI,Android)。反射...

    Unity应用的IOS热更新

    这意味着传统意义上的热更新方法(如Android上的反射机制)在iOS上无法实现。因此,Unity应用的iOS热更新通常采用Unity+Lua插件的方式。 ##### Android与iOS热更新的异同 - **Android热更新**: - 将执行代码预...

    总结iOS中runtime的使用

    6. **反射(Reflection)**:类似于Java的反射机制,Runtime可以让我们在运行时检查类的信息,比如获取类的所有属性、方法等,这在编写通用代码或者元编程时非常有用。 7. **动态加载类和Category**:Runtime支持在...

    iOS KVC实现原理

    - **反射**:KVC提供了一种动态访问对象属性的方式,常用于反射机制。 - **自动化测试**:在单元测试中,可以使用KVC快速检查对象的属性值。 ### 4. KVC与KVO(Key-Value Observing) KVC虽然提供了属性访问的灵活...

    iOS 4 Programming Cookbook

    本章将全面介绍iOS 4中的内存管理机制,包括引用计数、垃圾回收等内容。通过学习这些知识,开发者可以更好地控制应用的内存使用情况,从而提高应用的整体性能和稳定性。 通过阅读《iOS 4 Programming Cookbook》这...

    iOS 数据库封装SKYdata

    在FMDatabase的基础上面扩展了一个利用反射机制来新建数据库字段,无需写任何SQL语句,创建表不需要写,增删改查也不需要,只要继承接口然后给个主键及表就可以进行数据库操作,十分方便。 作者注:里面我有写了一个...

    iOS Core Animation Advanced Techniques(iOS核心动画高级技巧)中文版

    4. **图层组合与复合**:学习如何通过图层的组合和复合操作来实现更复杂的视图效果,如遮罩、模糊、反射、阴影等。 5. **离屏渲染与图层优化**:理解离屏渲染的机制,知道何时会触发离屏渲染,以及如何避免或优化离...

    iOS runtime底层框架原码

    Objective-C runtime是一个动态的C语言库,它为OC提供了消息传递、类反射、元数据等机制,使得OC具备了强大的动态性。当我们谈论“iOS runtime底层框架原码”时,实际上是在探讨OC runtime的实现细节和内部工作原理...

    ios 代码注入(Framework)

    4. **注入代码**:最后,通过反射、消息转发或者其他机制,将自定义框架中的代码插入到目标应用的执行流程中。例如,在Objective-C中,可以通过KVC(Key-Value Coding)或Category来修改类的行为。 **注意事项与...

    IOS KVC和KVO

    2. 动态属性操作:在运行时动态获取或设置对象的属性,如反射。 3. JSON序列化和反序列化:将JSON数据转换为对象模型时,KVC能简化处理过程。 ### KVO(Key-Value Observing) KVO是一种观察者模式的实现,允许一...

    Andorid JAVA IOS 全套汇总

    6. 多线程:创建和管理线程,同步机制如synchronized关键字和Lock接口。 7. Java标准库:如IO、NIO、网络编程、反射、泛型等API的使用。 8. JDBC:与数据库交互,执行SQL语句。 9. 设计模式:常见23种设计模式在实际...

    cisco ios and junos.pdf

    - **EBGP路径选择**:对比了Cisco IOS和JUNOS软件中EBGP路径选择机制的异同。 #### 服务访问限制 为了增强网络安全性和控制访问权限,本文档还讨论了如何在Cisco IOS和JUNOS软件中配置访问限制。 - **Cisco IOS...

    iOS运行时(runtime)示例代码

    Objective-C的消息传递机制是基于运行时的。当我们调用一个方法时,实际上是向对象发送一条消息。如果对象不响应该消息,系统会按照特定顺序处理未找到的方法,即消息转发。 4. **消息转发(Message Forwarding)*...

    IOS 反色属性 自动插入到数据库 读取 修改 删除

    在本例中,我们将重点讨论Objective-C的反射机制。 首先,我们要创建一个数据模型类,比如`User`,包含一些属性,如`name`、`age`等。为了让这个类能自动与数据库交互,我们需要使用`LKDBHelper`,这是一个流行的轻...

    ios-Runtime.zip

    其次,Runtime提供了强大的反射能力。通过Reflection,我们可以在运行时获取类的信息,如类名、属性、方法等,甚至可以动态地创建、修改和调用对象。这对于编写元编程(Metaprogramming)或者调试工具非常有用。 在...

    iOS开发Runtime的用法

    Objective-C的对象通信基于消息传递机制。当调用一个方法时,实际上是向对象发送一条消息。Runtime负责查找对应的方法实现并执行。如果找不到对应的方法,Runtime会调用`forwardInvocation:`进行处理,或者抛出异常...

Global site tag (gtag.js) - Google Analytics