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 ...
随机推荐
- .NetCore源码阅读笔记系列之Security (四) Authentication & AddJwtBearer
接下来我们在来看下AddJwtBearer,这个与AddOpenIdConnect不太一样,后者是远程发起身份认证请求是一种主动发起式的,多用于web等客户端,验证发生在身份认证服务端,而前者是一种被 ...
- JVM启动过程 类加载器
下图来自:http://blog.csdn.net/jiangwei0910410003/article/details/17733153 package com.test.jvm.common; i ...
- webpack 模块标识符(Module Identifiers)
让我们向项目中再添加一个模块 print.js: project webpack-demo |- package.json |- webpack.config.js |- /dist |- /src ...
- win10定时执行php脚本
转自http://www.cnblogs.com/wenhainan/p/6962089.html 第一步:确认windows上是否配置好了php环境变量,我用xampp安装的lamp环境,默认已经配 ...
- python导包踩过的坑之包名和模块名同名
- Codeforces 555D Case of a Top Secret
Case of a Top Secret 感觉除了两个点在那循环的部分, 其他时候绳子的长度每次变为一半一下, 就变成了Log(l)步.. 然后就暴力找就好啦, 循环的部分取个模. #include& ...
- URAL - 1427-SMS
题目大意:给你长度为n的字符串(n<=1e6),让你对它进行划分,如果一段里面只有字母和 空格可以包含m(m<=1e5)个,如果有其他字符只能包含n个,问你最少需要分成几段. 思路:划分d ...
- 【Java】 剑指offer(20) 表示数值的字符串
本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集 题目 请实现一个函数用来判断字符串是否表示数值(包括整数和小数).例如, ...
- ModuleNotFoundError: No module named 'win32api'
原因:缺少了win32解决: pip install pypiwin32
- webstorm 格式化代码及常用快捷键
mac 下 webstorm 格式化代码的快捷键 Option+Command+l windows 下 webstorm 格式化代码的快键键 Ctrl+Alt+l centOS 下webstorm 格 ...