iOS开发-获取属性和方法
iOS开发数据存储有两种方式,属性列表和对象编码,属性列表可以通过NSArray,NSMutableArray,NSMutableDictionary,存储对象我们可以通过归档和解档来完成。如果我们想通过属性列表存储对象呢?这个时候我们就需要获取对象的属性列表和值。
NSMutableDictionary *mutableDic=[[NSMutableDictionary alloc]init];
u_int count;
objc_property_t *properties= class_copyPropertyList([self.msg class], &count);
for (NSInteger i = 0; i < count ; i++)
{
const char *propertyName = property_getName(properties[i]);
NSString *key = [NSString stringWithCString:propertyName encoding:NSUTF8StringEncoding];
NSString *value=[self.msg valueForKey:key];
[mutableDic setObject:value forKey:key];
}
NSString *dataPath = [[NSBundle mainBundle] pathForResource:@"MyData" ofType:@"plist"];
[mutableDic writeToFile:dataPath atomically:YES];
NSMutableDictionary *data = [[NSMutableDictionary alloc] initWithContentsOfFile:dataPath];
NSLog(@"%@",data);
中间的代码objc_property_t获取属性数组,之后通过属性的名称存储对应的值,效果如下:

我们可以获取属性也可以获取方法,跟获取属性类似,代码如下:
u_int methodCount;
Method* methods= class_copyMethodList([msg class], &methodCount);
for (int i = 0; i < methodCount ; i++)
{
SEL name = method_getName(methods[i]);
NSString *methodName= [NSString stringWithCString:sel_getName(name) encoding:NSUTF8StringEncoding];
NSLog(@"method:%@",methodName);
}
关于方法获取也有一些其他比较实用的方法:
SEL method_getName(Method m) 由Method得到SEL
MP method_getImplementation(Method m) 由Method得到IMP函数指针
const char *method_getTypeEncoding(Method m) 由Method得到类型编码信息unsigned int method_getNumberOfArguments(Method m)获取参数个数
char *method_copyReturnType(Method m) 得到返回值类型名称
IMP method_setImplementation(Method m, IMP imp) 为该方法设置一个新的实现
除了获取属性和方法我们也可以通过class_copyIvarList获取变量,获取变量值:
u_int varCount;
Ivar *vars= class_copyIvarList([msg class], &varCount);
for (int i = 0; i < varCount ; i++)
{
const char *varname = ivar_getName(vars[i]);
NSString *varName= [NSString stringWithCString:varname encoding:NSUTF8StringEncoding];
NSString *value=[msg valueForKey:varName];
NSLog(@"变量:%@--值:%@",varName,value);
}
iOS开发-获取属性和方法的更多相关文章
- 李洪强iOS开发Swift篇—10_方法
李洪强iOS开发Swift篇—10_方法 一.简单说明 跟其他面向对象语言一样,Swift中的方法可以分为2大类: (1)实例方法(Instance Methods) 在OC中,实例方法以减号(-)开 ...
- iOS开发-automaticallyAdjustsScrollViewInsets属性
iOS开发-automaticallyAdjustsScrollViewInsets属性 Available in iOS 7.0 and later. 简单点说就是automaticallyAdju ...
- IOS开发中重写init方法使用需谨慎
IOS开发中重写init方法使用需谨慎 今天在写一个小软件的时候出现一点问题,这个软件的功能是搜索全国学校,首页就是搜索输入框,在框中输入完要查询的学校所在省份,点击buttom后就会跳转到对应的视图 ...
- iOS 开发获取唯一标识
在做流量精灵的时候有这样一个需求,帐户默认需要取手机的imsi 信息.这就有一个好处,即便用户删除我们的应用后从新下载,下次进入时他们还会以同样的身份登陆,并且获得原先纪录.这样不仅对于开发公司人员来 ...
- iOS开发UITableView基本使用方法总结
本文为大家呈现了iOS开发中UITableView基本使用方法总结.首先,Controller需要实现两个delegate ,分别是UITableViewDelegate 和UITableViewDa ...
- iOS开发UITableView基本使用方法总结 分类: ios技术 2015-04-03 17:51 68人阅读 评论(0) 收藏
本文为大家呈现了iOS开发中UITableView基本使用方法总结.首先,Controller需要实现两个delegate ,分别是UITableViewDelegate 和UITableViewDa ...
- iOS开发使用半透明模糊效果方法整理
虽然iOS很早就支持使用模糊效果对图片等进行处理,但尤其在iOS7以后,半透明模糊效果得到大范围广泛使用.包括今年最新发布的iOS8也沿袭了这一设计,甚至在OS X 10.10版Yosemite中也开 ...
- [转]iOS开发使用半透明模糊效果方法整理
转自:http://www.molotang.com/articles/1921.html 虽然iOS很早就支持使用模糊效果对图片等进行处理,但尤其在iOS7以后,半透明模糊效果得到大范围广泛使用.包 ...
- php反射API 获取属性/注释/方法 执行方法 实例
<?php class Person { /** * 这里是对$_allowDynamicAttributes的注释信息 */ private $_allowDynamicAttributes ...
随机推荐
- 洛谷P3865 ST表
传送门啦 思路: $ f[i][j] $ 表示从 $ i $ 开始,包含 $ 1<<j $ 个元素的区间的区间最大值: 转移方程: $ f[i][j]=max_(f[i][j-1],f[i ...
- LeetCode(27): 移除元素
Easy! 题目描述: 给定一个数组 nums 和一个值 val,你需要原地移除所有数值等于 val 的元素,返回移除后数组的新长度. 不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1 ...
- P2163 【[SHOI2007]园丁的烦恼】
其实是不用把一个询问拆成四个的 把询问转化为数学语言: 对于每个查询,询问满足$a<=x<=b$且$c<=y<=d$的点$x,y$的个数 ~~自然~~想到偏序问题,看到有两个式 ...
- gcd,lcm
定理:gcd(a,b)*lcm(a,b)=a*b; 更相损减术:gcd(a,b)=gcd(b,a-b)=gcd(a,a-b) 欧几里得算法:gcd(a,b)=gcd(b,a mod b) 复杂度O(l ...
- Myeclipse如何使用自带git工具向远程仓库提交代码
先看一下Myeclipse自带的git工具 本人是在码云上面注册的账号,上面有项目的仓库,将仓库的项目克隆到本地之后,在myeclipse中导入该项目. 那么如何将修改后的代码再提交到码云上面? 第 ...
- 对MariaDB10.0的Sphinx进行扩展
已修改过的文件:http://pan.baidu.com/s/1o8DHvkA 将这两个文件放到MariaDB的解压目录后,再进行安装 /usr/local/mariadb-10.0.28/stora ...
- [转] Java基础知识——Java语言基础
http://blog.csdn.net/loneswordman/article/details/9905931 http://blog.csdn.net/wanghuan203/article/d ...
- Python open详解
一.打开文件的模式有: 1.r,只读模式[默认]. 2.w,只写模式.[不可读,不存在则创建,存在则删除内容] 3.a,追加模式.[可读,不存在则创建,存在则只追加内容] 二.+ 表示可以同时读写某个 ...
- BZOJ1878 [SDOI2009]HH的项链 树状数组 或 莫队
欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ1878 题意概括 给出一个长度为n的序列,用m次询问,问区间Li~Ri中有多少种不同的数. 0< ...
- P3147 [USACO16OPEN]262144
P3147 [USACO16OPEN]262144一道非常有趣的游戏,不,题目.当数据水时,可以这样表示状态.f[i][j]表示合并[i,j]区间所能得到的最大值,有点floyed的小味道.if(f[ ...