文档章节

Objective-C 反射

子非鱼你造么
 子非鱼你造么
发布于 2015/06/09 22:01
字数 632
阅读 19
收藏 0

acount.h

//
//  Acount.h
//  KenshinCui
//
//  Created by hxd_mac on 15-6-9.
//  Copyright (c) 2015年 hxd198. All rights reserved.
//
#import <Foundation/Foundation.h>
@interface Acount : NSObject
@property (nonatomic, assign) double balance;
@end

acount.m

//
//  Acount.m
//  KenshinCui
//
//  Created by hxd_mac on 15-6-9.
//  Copyright (c) 2015年 hxd198. All rights reserved.
//
#import "Acount.h"
@implementation Acount
@end

person.h

//
//  Person.h
//  KenshinCui
//
//  Created by hxd_mac on 15-6-9.
//  Copyright (c) 2015年 hxd198. All rights reserved.
//
#import <Foundation/Foundation.h>
@class Acount;
@interface Person : NSObject
@property (nonatomic, copy) NSString *name;
@property (nonatomic, assign) Acount *acount;
- (Person *) initWithName : (NSString *) name;
+ (Person *) personWithName : (NSString *) name;
- (void) showMessage : (NSString *) information;
- (NSComparisonResult ) comparePerson : (Person *) person;
@end

person.m

//
//  Person.m
//  KenshinCui
//
//  Created by hxd_mac on 15-6-9.
//  Copyright (c) 2015年 hxd198. All rights reserved.
//
#import "Person.h"
@implementation Person
- (Person *) initWithName:(NSString *)name
{
    if (self = [super init]) {
        self.name = name;
    }
    
    return (self);
}
+ (Person *) personWithName:(NSString *)name
{
    Person *person = [[Person alloc] initWithName:name];
    
    return person;
}
- (void) showMessage:(NSString *)information
{
    NSLog(@"my name is %@, the imformation is %@", _name, information);
}
- (NSComparisonResult) comparePerson:(Person *)person
{
    return  [_name compare:person.name];
}
- (NSString *) description
{
    return [NSString stringWithFormat:@"name = %@", _name];
}
@end

main.m

//
//  main.m
//  KenshinCui
//
//  Created by hxd_mac on 15-6-7.
//  Copyright (c) 2015年 hxd198. All rights reserved.
//
#import <Foundation/Foundation.h>
#import "Person.h"
int main(int argc, const char * argv[])
{
    @autoreleasepool {
        
        /*常用方法*/
        Person *person1=[Person personWithName:@"Kenshin"];
        NSLog(@"%i",[person1 isKindOfClass:[NSObject class]]); //判断一个对象是否为某种类型(如果是父类也返回YES),结果:1
        NSLog(@"%i",[person1 isMemberOfClass:[NSObject class]]); //判断一个对象是否是某个类的实例化对象,结果:0
        NSLog(@"%i",[person1 isMemberOfClass:[Person class]]); //结果:1
        NSLog(@"%i",[person1 conformsToProtocol:@protocol(NSCopying)]);//是否实现了某个协议,结果:0
        NSLog(@"%i",[person1 respondsToSelector:@selector(showMessage:)]);//是否存在某个方法,结果:1
        
        [person1 showMessage:@"Hello,world!"];//直接调用一个方法
        [person1 performSelector:@selector(showMessage:) withObject:@"Hello,world!"];
        //动态调用一个方法,注意如果有参数那么参数类型只能为ObjC对象,并且最多只能有两个参数
        
        
        /*反射*/
        //动态生成一个类
        NSString *className=@"Person";
        Class myClass=NSClassFromString(className);//根据类名生成类
        Person *person2=[[myClass alloc]init]; //实例化
        person2.name=@"Kaoru";
        NSLog(@"%@",person2);//结果:name=Kaoru
        
        //类转化为字符串
        NSLog(@"%@,%@",NSStringFromClass(myClass),NSStringFromClass([Person class])); //结果:Person,Person
        
        //调用方法
        NSString *methodName=@"showMessage:";
        SEL mySelector=NSSelectorFromString(methodName);
        Person *person3=[[myClass alloc]init];
        person3.name=@"Rosa";
        [person3 performSelector:mySelector withObject:@"Hello,world!"]; //结果:My name is Rosa,the infomation is "Hello,world!".
 
        //方法转化为字符串
        NSLog(@"%@",NSStringFromSelector(mySelector)); //结果:showMessage:
    }
    return 0;
}

输出结果:

2015-06-09 21:43:20.202 KenshinCui[490:303] 1

2015-06-09 21:43:20.238 KenshinCui[490:303] 0

2015-06-09 21:43:20.240 KenshinCui[490:303] 1

2015-06-09 21:43:20.241 KenshinCui[490:303] 0

2015-06-09 21:43:20.243 KenshinCui[490:303] 1

2015-06-09 21:43:20.246 KenshinCui[490:303] my name is Kenshin, the imformation is Hello,world!

2015-06-09 21:43:20.248 KenshinCui[490:303] my name is Kenshin, the imformation is Hello,world!

2015-06-09 21:43:20.249 KenshinCui[490:303] name = Kaoru

2015-06-09 21:43:20.251 KenshinCui[490:303] Person,Person

2015-06-09 21:43:20.253 KenshinCui[490:303] my name is Rosa, the imformation is Hello,world!

2015-06-09 21:43:20.254 KenshinCui[490:303] showMessage:


本文转载自:http://www.cnblogs.com/kenshincui/p/3885689.html

子非鱼你造么
粉丝 2
博文 37
码字总数 4492
作品 0
深圳
私信 提问
(1)知识准备【利用objective-c的runtime特性,结合FMDB实现一个轻量级的ORM】

版权声明:本文为博主原创文章,未经博主允许不得转载。 (本ORM的源码已经上传到github上 (https://github.com/helloclq/BCSqliteORMFMDB),大家可以下载测试,如发现什么问题或意见,欢迎大...

辉兔狼
2015/09/09
988
0
枚举--ReflectableEnum

ReflectableEnum 是引入枚举反射的一组函数和 宏,用 Objective-C 写成。 特性: 获得枚举的成员的字符串值 (which is a common problem) 获取所有在枚举中使用的值 (also a prevalent issu...

sikkx
2015/06/04
171
0
Java转Objective-C工具--J2ObjC

J2ObjC 是一个来自 Google 的开源命令行工具,用于将 Java 代码转成 iOS 平台上的 Objective-C 代码。该工具使得 Java 代码可作为 iOS 应用构建的一部分,而且无需对生成的文件进行编辑。其目...

匿名
2012/09/14
27.4K
4
如何实现iOS热更新

如何实现iOS热更新 字数803 阅读7169 评论19 喜欢42 最近被苹果审核整怕了,每次提交版本都得等待一周到两周的审核时间,我是受不了这种速度了,于是决定研究有没有其他的方法跳过提交版本这...

法斗斗
2016/08/15
83
0
为什么 Objective-C 很难

作为一个Objective-C的coder,我总能听到一部分人在这门语言上抱怨有很多问题。他们总在想快速学习这门语言来写一个App出来,但他们也总是联想到Objective-C看上去实在太难了或者在想这些语法...

junwong
2012/03/07
168.9K
69

没有更多内容

加载失败,请刷新页面

加载更多

centos7 安装 mysql5.7 版本(全)

centos 安装 版本说明 :centos7,mysql5.7 ,不是 centos7 可能有些命令不兼容 安装 mysql-server # 下载并安装 mysql yum wget -i -c http://dev.mysql.com/get/mysql57-community-relea......

sanri1993
23分钟前
3
0
Spring3.x升级到Spring4.x-5.x时关于MappingJacksonHttpMessageConverter的报错问题

在Spring4.x或者以上的版本强使用(不然会报错): org.springframework.http.converter.json.MappingJackson2HttpMessageConverter 如果是Spring4.0获者以下的版本可以使用MappingJacksonH...

code-ortaerc
25分钟前
3
0
OSG 渲染状态污染到其它节点怎么解决?

在根节点补上初始状态

洛克人杰洛
27分钟前
3
0
grid 布局 设置行列间距

本文转载于:专业的前端网站➪grid 布局 设置行列间距 <!DOCTYPE html><html lang="zh"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="widt......

前端老手
39分钟前
3
0
spring-data-elasticsearch 和 Jackson 配合使用的bug

下面先简单描述项目。 项目依赖: dependencies { implementation group: 'org.springframework.boot', name: 'spring-boot-starter-data-elasticsearch', version: '2.1.0.RELEASE'......

Landas
40分钟前
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部