美文网首页
方法Method介绍:2-方法的调用

方法Method介绍:2-方法的调用

作者: 赵亦晨 | 来源:发表于2016-10-17 17:51 被阅读0次

在Objective-C中,调用一个方法相当于传递一个消息,这里的消息指的是方法名和参数。所有消息的分派都是动态的,所谓动态指的是所有消息处理直到执行时(runtime)才会动态决定,而不是在编译时就绑定,这也体现了Objective-C对象的多态行为(多态性是指不同类型的对象响应同一消息的能力)。

1、方法调用的方式

在Objective-C中,调用一个方法相当于传递一个消息,消息中包含方法名(也称为选择器)和参数。

普通调用:使用方括号[]将消息本身与参数放到括号内,同时将接收消息的对象放在最前面。如下所示:

NSString*str=[NSStringstringWithFormat:@"宏创学院"];//类方法调用

NSString*str2=[NSStringstringWithFormat:@"探索苹果iOS开发最佳实践!"];//类方法调用

str=[str stringByAppendingString:str2];//实例方法调用

NSLog(@"%@",str);

嵌套调用:有时为了避免声明大量的局部变量来存储临时结果,Objective-C也支持嵌套消息表达式。上面的案例中,我们可以不声明str2,可以对代码做如下改写:

NSString*str=[NSStringstringWithFormat:@"宏创学院"];//类方法调用

str=[str stringByAppendingString:[NSStringstringWithFormat:@"探索苹果iOS开发最佳实践!"]];//方法的嵌套调用

NSLog(@"%@",str);

调用父类的方法:子类可以直接调用父类的方法。如下所示:HCClass继承自NSObject,因此HCClass的对象myClass可以直接调用NSObject的copy方法。

HCClass*myClass1=[[HCClassalloc]init];

//调用父类的copy方法

HCClass*myClass2=[myClass1 copy];

2、点语法

Objective-C中还提供专门用于调用【存取方法】的点语法。我们可以调用getter/setter方法来获取/设置实例变量/属性的值,同样的,可以使用点语法来更加简便的获取/设置对象的值。

下面的示例代码中,同时使用点语法对myClass对象的className属性赋值,然后又使用点语法来获取对应的值。

//实例化对象

HCClass*myClass=[[HCClassalloc]init];

//使用点语法赋值

myClass.className=@"HCClass";

//使用点语法取值

NSLog(@"class name is %@",myClass.className);

3、消息处理机制

为了深入理解消息、方法、接收者这些概念,就必须要了解消息处理的机制。在OC中,消息是直到运行的时候才和方法进行绑定关联的。

消息机制的关键在于编译器为类和对象生成的结构。其中类的结构中包含两个基本元素:第一,指向父类的指针;第二,类的方法列表。而对象被创建时,对象的第一个实例变量是一个指向该对象的“类结构”的指针,即isa,通过该指针,就可以访问到该类及其父类的方法列表。

当向某个对象发送消息时:

首先根据isa指针,找到该对象对应的类结构的方法列表,此时即可找到具体的方法实现;当在本类的方法列表中找不到对应的方法时,会类结构中父类的指针去查找父类的方法列表,直至NSObject根类;

将对象以及参数传递给找到的方法实现;

获取方法的返回值。

相关文章

网友评论

      本文标题:方法Method介绍:2-方法的调用

      本文链接:https://www.haomeiwen.com/subject/mvhzyttx.html