【OBJC类扩展之属性字典】NSObject+Property

#import <Foundation/Foundation.h>

#import <objc/runtime.h>

@interface NSObject (Property)

//将对象属性封装到字典,并返回字典

-(NSDictionary *)propertyDictionary;

@end

@implementation NSObject (Property)

-(NSDictionary *)propertyDictionary

{

//创建可变字典

NSMutableDictionary *dict = [NSMutableDictionary dictionary];

unsigned int outCount;

objc_property_t *props = class_copyPropertyList([self class], &outCount);

for(int i=0;i<outCount;i++){

objc_property_t prop = props[i];

NSString *propName = [[NSString alloc]initWithCString:property_getName(prop) encoding:NSUTF8StringEncoding];

id propValue = [self valueForKey:propName];

if(propValue){

[dict setObject:propValue forKey:propName];

}

}

free(props);

return dict;

}

@end

时间: 2024-08-19 05:23:32

【OBJC类扩展之属性字典】NSObject+Property的相关文章

【OBJC类扩展之MD5加密】NSString+MD5

#import<Foundation/Foundation.h> @interface NSString (md5) - (NSString *) md5; @end #import "NSString+MD5.h" #import<CommonCrypto/CommonDigest.h> @implementation NSString (md5) - (NSString *) md5 { const char *cStr = [selfUTF8String]

【OBJC类扩展之尺寸】UIView+Size

import import "UIView+Size.h" @implementation UIView (Size) - (void)setSize:(CGSize)size; { CGPoint origin = [self frame].origin; [self setFrame:CGRectMake(origin.x, origin.y, size.width, size.height)]; } - (CGSize)size; { return [self frame].si

福利-&gt;KVC+Runtime获取类/对象的属性/成员变量/方法/协议并实现字典转模型

我们知道,KVC+Runtime可以做非常多的事情.有了这个,我们可以实现很多的效果. 这里来个福利,利用KVC+Runtime获取类/对象的所有成员变量.属性.方法及协议: 并利用它来实现字典转模型. 废话不多说,直接上代码: 1.工具类(其实就是NSObject的一个分类)头文件 1 #import <Foundation/Foundation.h> 2 3 @interface NSObject (YSRuntime) 4 5 /** 6 返回当前类的属性数组 7 8 @return 属

通过字典给类的实体属性赋值生成url字符串

private static Dictionary<string, string> SortedToDictionary(SortedDictionary<string, string> dicArrayPre, params string[] paras) { Dictionary<string, string> dict = new Dictionary<string, string>(); foreach (KeyValuePair<string

Objective-c 05 类别 类扩展 委托 非正式协议 协议 代码块 并发性 队列

类别 为已经存在的类添加行为时,通常采用创建子类的方法,不过有时子类并不方便, 比如:创建NSString的子类,但是NSString实际上只是一个类簇的表面形式.因而为这样的类创建子类会非常困难.在其他情况下, 也许可以创建它的子类,但是用到的工具集和库无法帮你处理新类的对象的.例如:当使用stringWithFormat:类方法生成新字符串时,你创建的 NSString类的新子类就无法返回.   利用Objective-C的动态运行时分配机制,可以为现有的类添加新的方法.这些新的方法在Obj

分类(类别/Category)与 类扩展(Extension)

一.分类(类别/Category) 1.适用范围 当你已经封装好了一个类(也可能是系统类.第三方库),不想在改动这个类了,可是随着程序功能的增加需要在类中增加一个方法,这时我们不必修改主类,只需要给你原来的类增加一个分类. 将一个大型的类拆分成不同的分类,在不同分类中实现类别声明的方法,这样可以将一个类的实现写到多个.m文件中,方便管理和协同开发. 分类中的方法可以只声明,不实现,所以在协议不支持可选方法的时候(协议现在已经支持可选方法),通常把分类作为非正式协议使用. 2.语法格式 文件中的语

Objective-C基础7 : 类扩展(class extension)

封装的特性就是暴露公共接口给外边调用,C++通过public定义公共方法提供给外面调用,protected和private定义的方法只能在类里面使用,外面不能调用,若外面调用,编译器直接报错,对于变量也同理.OC里面类扩展类似protected和private的作用. 1.类扩展是一种特殊的类别,在定义的时候不需要加名字.下面代码定义了类Things的扩展. @interface Things () { NSInteger thing4; } @end 2.类扩展作用 1)可以把暴露给外面的可读

OC中分类、类扩展、Block、协议(由协议引出的代理模式)

一: 分类(Category) 1>Category的概念:就是在不改变原来类的基础上,为类增加一些方法 (1,可以为库中定义的类增加方法:2,可以给自己定义的类增加方           法)仅仅是方法哦 好处:一个类可以有多个文件,编译器会将这些文件按一个类除了,便于团队合作. 2> 代码格式: 自定义类中加分类 Person类 #import "Person.h" @interface Person : NSObject - (void)sayHi; @end @im

分类 类扩展 继承 协议 委托

分类 类扩展 继承 协议 委托 分类(Category) 不产生新类,不修改原类,但有自己的.h和.m文件 分类只能向原类中增加方法,或者重写原类的方法 声明的@property只会生成getter setter方法的声明 类.h中定义的方法必须实现,但分类.h中定义的方法,可以不实现 同名方法,分类的优先级高类别主要有3个作用:(1)将类的实现分散到多个不同文件或多个不同框架中.(2)创建对私有方法的前向引用.(类.h中未声明,但存在于.m中的私有方法,通过在分类.h中声明一下,就可以在其他类