ios开发 Reflection(二)

反射机制可以获取的内容

1.获取一个 类的所有属性

 1 #pragma -mark 获取变量列表
 2
 3 -(void)getVarName
 4 {
 5     unsigned int numIvars; //成员变量个数
 6     Ivar *vars = class_copyIvarList(NSClassFromString(@"TestObject"), &numIvars);
 7     //Ivar *vars = class_copyIvarList([UIView class], &numIvars);
 8
 9     NSString *key=nil;
10     for(int i = 0; i < numIvars; i++) {
11
12         Ivar thisIvar = vars[i];
13         key = [NSString stringWithUTF8String:ivar_getName(thisIvar)];  //获取成员变量的名字
14         NSLog(@"variable name :%@", key);
15         key = [NSString stringWithUTF8String:ivar_getTypeEncoding(thisIvar)]; //获取成员变量的数据类型
16         NSLog(@"variable type :%@", key);
17     }
18     free(vars);
19
20 }

2.获取一个类的所有方法:

 1 #pragma -mark 获取方法列表
 2
 3 -(void)getFunName
 4 {
 5      unsigned int numIvars; //成员方法个数
 6     Method *meth = class_copyMethodList(NSClassFromString(@"TestObject"), &numIvars);
 7     //Method *meth = class_copyMethodList([UIView class], &numIvars);
 8
 9     for(int i = 0; i < numIvars; i++) {
10         Method thisIvar = meth[i];
11
12         SEL sel = method_getName(thisIvar);
13         const char *name = sel_getName(sel);
14
15         NSLog(@"zp method :%s", name);
16
17
18     }
19     free(meth);
20 }

3.获取变量名

 1 #pragma -mark 根据变量属性值获取属性名
 2
 3 - (NSString *)nameWithInstance:(id)instance
 4 {
 5     unsigned int numIvars = 0;
 6     NSString *key=nil;
 7     Ivar * ivars = class_copyIvarList([TestObject class], &numIvars);
 8     for(int i = 0; i < numIvars; i++) {
 9         Ivar thisIvar = ivars[i];
10         const char *type = ivar_getTypeEncoding(thisIvar);
11         NSString *stringType =  [NSString stringWithCString:type encoding:NSUTF8StringEncoding];
12         if (![stringType hasPrefix:@"@"]) {
13             continue;
14         }
15         if ((object_getIvar(tObject, thisIvar) == instance)) {
16             key = [NSString stringWithUTF8String:ivar_getName(thisIvar)];
17             break;
18         }
19     }
20     free(ivars);
21
22     NSLog(@"key:%@",key);
23
24     return key;
25
26 }
时间: 2024-07-30 08:17:16

ios开发 Reflection(二)的相关文章

零基础学习IOS开发(二)- 使用cocos2d-x3.0 执行Hello world

关于开发框架,依据网上检索来的信息,感觉cocos2d-x的ios游戏开发框架非常不错,并且有非常强的可移植性,因此打算尝试一下. 截止写下此文章,最新的cocos2d-x的版本号为v3.0稳定版(几天前刚刚公布),下载地址为:http://www.cocos2d-x.org/filedown/cocos2d-x-3.0-cn 安装方式例如以下: 1.解压程序压缩包(所在路径不能有中文哦,由于是python,你懂的...) 2.sudo python setup.py 安装cocos2d-x,依

学iOS开发(二)——实现一款App之编写自定义类

今天学iOS开发(二)--实现一款App之编写自定义类 当开发iOS应用程序时,你会发现在许多场景下,你需要编写自己的自定义类.当你需要数据和自定义行为一起打包时,自定义类就很有用了.在一个自定义的类中,你可以为存储.操纵和显示数据定义你自己的行为. 例如,考虑iOS Clock app中的全球时钟标签(World Clock tab).这个表视图中的单元格需要显示比标准表视图单元格更多的内容.这是一个不错的机会实现一个扩展UITableViewCell行为的子类,从而在给定的表视图单元格中显示

从零开始学ios开发(二):Hello World!

今天看了书的第二章,主要介绍了一下Xcode的使用方法和一些必要的说明,最后做了一个“Hello World!”的小程序,其实就是在屏幕上用一个Label显示“Hello World!”,一行代码都没有写,拖拖控件,改变一下Label字体大小颜色什么的,还是比较简单的,下面把这个过程写一下,至于xcode的使用说明就不在这里具体叙述了,反正到时候用到哪就介绍到哪里吧. 1)启动Xcode 选择“Create a new Xcode project”,创建一个新的项目. 2)模板选择,选择“Sin

iOS开发-二维码

二维码 从ios7开始集成了二维码的生成和读取功能 此前被广泛使用的zbarsdk目前不支持64位处理器 生成二维码的步骤: 倒入CoreImage框架 通过滤镜CIFilter生成二维码 二维码的内容(传统的条形码职能放数字) 纯文本 名片 URL 二维码的生成 // 1.创建过滤器 CIFilter *filter = [CIFilter filterWithName:@"CIQRCodeGenerator"]; // 2.恢复默认 [filter setDefaults]; //

iOS开发-UI (二)Button和Image

知识点: 1.UIButton使用和事件机制 2.UIImage 3.自定义UIButton ================== UIButton 1.创建方式 按钮类型 UIButtonTypeCustom       用户自定义按钮 UIButtonTypeRoundedRect      系统按钮 UIButtonTypeDetailDisclosure   更多信息按钮   i UIButtonTypeInfoLight           高亮信息按钮   i UIButtonTyp

IOS 开发之 二维码

二维码扫描 可以使用: iOS7系统库, ZBarSDK, ZXing 1. iOS7开始系统提供二维码扫描库 2. 设置依赖库 AVFoundation.framework 3. 包含头文件 -- 包含头文件 #import <AVFoundation/AVFoundation.h> 4. 扫描核心方法 #pragma mark - 读取二维码 - (void)readQRcode 5. 处理扫描结果核心方法 // 此方法是在识别到QRCode,并且完成转换 // 如果QRCode的内容越大

iOS开发之二维码扫描

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 18.0px "PingFang SC"; color: #1e9421 } span.s1 { } 二维码扫描 01-导入系统库 02 新建继承自UIView的 p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 18.0px Menlo; color: #000000 } span.s1 { } LHQPreView 2.1导入系统库头文件 p.p1

ios开发 Block(二) 实现委托

委托和block是IOS上实现回调的两种机制.Block基本可以代替委托的功能,而且实现起来比较简洁,比较推荐能用block的地方不要用委托. 实现效果如图 第一步,自定义CustomCell 1 #import <Foundation/Foundation.h> 2 3 @interface CustomCell : UITableViewCell 4 5 @property (strong, nonatomic) IBOutlet UILabel *labName; 6 @property

ios开发多线程二:NSOperationQueue的基本使用

#import "ViewController.h" #import "XMGOperation.h" @interface ViewController () @end @implementation ViewController #pragma mark ---------------------- #pragma mark Events -(void)touchesBegan:(NSSet<UITouch *> *)touches withEven