iphone - 将所有对象属性放入 NSDictionary 或 NSArray

标签 iphone objective-c ios properties nsdictionary

有没有办法自动返回类中所有(公共(public))属性的 NSDictionary?您可以假设所有属性都是属性列表,并且我不想只传递一个指向类本身的指针。有什么现成的魔法可以实现这一目标吗?

我知道我可以延迟实例化一个 NSDictionary 并手动用 getter 中的属性填充它。

最佳答案

在 Objective-C 运行时使用 class_copyPropertyListproperty_getName 函数可以轻松获取已声明属性的数组。这是一个这样的实现:

- (NSArray *)properties
{
    NSMutableArray *propList = [NSMutableArray array];
    unsigned int numProps = 0;
    unsigned int i = 0;

    objc_property_t *props = class_copyPropertyList([TestClass class], &numProps);
    for (i = 0; i < numProps; i++) {
        NSString *prop = [NSString stringWithUTF8String:property_getName(props[i])];
        [propList addObject:prop];
    }

    return [[propList copy] autorelease];
}

您可以将此作为方法添加到 NSObject 的类别中。这是一个 full code listing可以编译来证明这一点。

我不确定您是如何使用 NSDictionary 做到这一点的,只是因为我不确定您期望的键值对是什么。

关于iphone - 将所有对象属性放入 NSDictionary 或 NSArray,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13462763/

相关文章:

iphone - 如何清除 UITableViewCell 上的删除确认状态

iphone - 如何仅检测是否是 iOS 设备并重定向?

ios - 从 swift ViewController 发送消息到 Objective C ViewController

objective-c - NSLocking 的使用是否应该始终包含在@try/@finally 中?

ios - 用于转发/链接信号的 ReactiveCoca 设计模式

ios - 在 UITableView 中显示一个表中的中型数据集

适用于特定设备的 iOS 应用

objective-c - 从 NSMutableArray 中删除对象

ios - 如何处理 UIAlertView iOS 的显示

objective-c - iPad 应用程序 - 生成文本文件