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 ...
随机推荐
- VSCode配置python调试环境
VSCode配置python调试环境 很久之前的一个东东,翻出来看看 VSCode配置python调试环境 * 1.下载python解释器 * 2.在VSCode市场中安装Python插件 * 4.在 ...
- 关于asp.net mvc中的httpModules 与 httpHandler
ASP.NET对请求处理的过程: 当请求一个*.aspx文件的时候,这个请求会被inetinfo.exe进程截获,它判断文件的后缀(aspx)之后,将这个请求转交给ASPNET_ISAPI.dll,A ...
- 数据流分段下载(Http之 Range)
public FileStreamResult StreamUploadedSongs(int id) { byte[] song = db.UploadedSongs.Where(x => x ...
- Could not find com.android.tools.build:aapt2:3.2.0-alpha14-4748712.
https://blog.csdn.net/lx6101989/article/details/80334232 android studio 升级到了3.0 取消了apt 报了这个错 在最上级的bu ...
- 使用vmware提示无法打开内核设备 \\.\Global\vmx86: 系统找不到指定的文件
问题描述 打开虚拟机时候提示 “vmware没有正常关闭,再次打开使用时蓝屏,在安全模式下再次打开不会蓝屏,但提示“无法打开内核设备 \\.\Global\vmx86: 系统找不到指定的文件,你想要安 ...
- C#学习网站收集
1. 大名鼎鼎的CodeGuru 号称代码领头羊 非常著名的关于程序开发的网站,大量的资料.强烈推荐 http://www.codeguru.com/ - 外文 2. Developer.com: A ...
- POJ 3262 Protecting the Flowers 【贪心】
题意:有n个牛在FJ的花园乱吃.所以FJ要赶他们回牛棚.每个牛在被赶走之前每秒吃Di个花朵.赶它回去FJ来回要花的总时间是Ti×2.在被赶走的过程中,被赶走的牛就不能乱吃 思路: 先赶走破坏力大的牛假 ...
- BZOJ2325 [ZJOI2011]道馆之战 树链剖分 线段树
欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ2325 题意概括 给你一棵N个点的树,树上的每个节点有A,B两块区域,且每种区域有两种状态:可以走的 ...
- Java相关英语单词
day1 Java概述 掌握 .JDK abbr. Java开发工具包(Java Developer's Kit) (abbr.缩写) .JRE abbr. Java运行环境(Java Runtime ...
- 【Java】 剑指offer(29) 顺时针打印矩阵
本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集 题目 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字. 思 ...