OC语法<3.4> OC中特有的语法:SEL基本数据类型
2014-12-12 00:19
609 查看
SEL基本数据类型
我们OC里面调用方法有两种方式比较多:
1:消息机制
2:用SEL基本数据类型
我们先看一下消息机制的工作原理
详细解释:
当创建一个对象的时候,就要用到对象当中的isa指针,它使指向类的方法列表的,我们用指针P调用对象的方法时候,其实就是发一个消息给Person对象,那么这个Person对象去那里找这个方法呢?没错,就是去方法列表里面去找,那它怎么去找方法的呢?其实就是指针在发消息的时候进行了一次包装,包装成了SEL类型的一个变量,以eat方法为例,就是把消息包装成了一个sel的一个变量:SEL
s = @selector(eat); 这个变量生成的指针地址(在isa中)就去方法列表里面去找有没有这个方法,实际上方法列表里面的所有方法都是SEL数据类型的。
下面我们看个示例:
给Person类写了三个方法,一个不带参数的,一个带的,一个带返回值的
main函数
我们OC里面调用方法有两种方式比较多:
1:消息机制
2:用SEL基本数据类型
我们先看一下消息机制的工作原理
详细解释:
当创建一个对象的时候,就要用到对象当中的isa指针,它使指向类的方法列表的,我们用指针P调用对象的方法时候,其实就是发一个消息给Person对象,那么这个Person对象去那里找这个方法呢?没错,就是去方法列表里面去找,那它怎么去找方法的呢?其实就是指针在发消息的时候进行了一次包装,包装成了SEL类型的一个变量,以eat方法为例,就是把消息包装成了一个sel的一个变量:SEL
s = @selector(eat); 这个变量生成的指针地址(在isa中)就去方法列表里面去找有没有这个方法,实际上方法列表里面的所有方法都是SEL数据类型的。
下面我们看个示例:
给Person类写了三个方法,一个不带参数的,一个带的,一个带返回值的
main函数
#import <Foundation/Foundation.h> #import "Person.h" int main(int argc, const char * argv[]) { @autoreleasepool { Person *p = [[Person alloc]init]; //调用方法有多种方式,下面这种是常用的消息机制,就是说是地址给对象发消息的机制 //[p eat]; //另外一种方式就是:越过发消息这一步,直接找到方法,用SEL数据类型 //使用@selector就能够把一个方法包装成SEL数据类型 SEL s2 = @selector(eat); [p performSelector:s2]; SEL s3 = @selector(call:); [p performSelector:s3 withObject:@"12312234234"]; SEL s5 = @selector(findName); NSString *str = [p performSelector:s5]; NSLog(@"str为:%@",str); //上面的看懂之后也可以简写成下面 [p performSelector:@selector(eat)]; [p performSelector:@selector(call:) withObject:@"123456788"]; NSString *str2 = [p performSelector:@selector(findName)]; NSLog(@"str2 为:%@",str2); } return 0; }Person的.h文件
#import <Foundation/Foundation.h> @interface Person : NSObject -(void)eat; -(void)call:(NSString *)number; -(NSString *)findName; @endPerson的.m文件
#import "Person.h" @implementation Person -(void)eat { NSLog(@"吃东西"); } -(void)call:(NSString *)number { NSLog(@"打电话需要的号码:%@",number); } -(NSString *)findName { return @"找到了义哥的名字"; } @end
相关文章推荐
- OC语法<4.8> Foundation框架中的-常用结构体和基本数据类型包装类
- OC语法<3.2> OC中特有的语法:Block数据类型
- JavaScript语法入门系列(三) 基本数据类型及其对应对象类型
- ruby: 基本数据类型与语法
- java基础--->基本数据类型之间的转换
- 1219学习笔记<基本数据类型>
- 我的php学习笔记(二)php基本数据类型、基本语法和基本运算类型及其应用
- php学习笔记(3):PHP基本语法和数据类型:
- java语法基本数据类型小结
- php程序员学习javascript:第一章:javascript基本语法:数据类型
- python语法31[基本数据类型和流程控制]
- Java 基本语法——数据类型
- Objective-C语法之基本数据类型
- J2SE学习笔记3 — Java基本语法(2)基本数据类型
- C#基本语法 - 基本的数据类型
- C#之基本知识和语法3 - 数据类型
- Java语法总结 - 基本数据类型
- 【学习笔记】JavaScript——基本语法与数据类型
- Obj-c基本语法、数据类型、运算符和控制语句
- PHP的基本语法和数据类型