OC中方法和函数的区别

关于方法和函数

通常我们来讲对实现某一具体功能的代码端我们称之为函数抑或方法.
但是方法和函数是有严格区别的,特别是在Objective-c 这样一门动态的一门语言

方法

通常我们口语中方法和函数基本上就是一回事,如下面的例子

- (int)sum:(int)a AndB:(int)b  
{
    return  a + b;  
}

我们看到这就定义了一个方法或者函数,但是真的就是这样吗?
其实严格说来上面定义了一个函数,而不是方法,而方法指的仅仅是函数的名字,也就是sum: AndB:

Objective-c中方法

Objective-c中的方法就是我门常用的selector,一个selector就是Objective-c的函数名字

函数

我们看一个在Objective-c函数的定义

struct objc_method 
{
    SEL method_name
    char *method_types
    IMP method_imp
}

一个函数包含了函数的名字method_name,函数的类型method_types以及IMP(函数的实现), Objective-c,通过函数的名字以及所传参数就能找到函数的实现,继而执行函数的实现.

其中method_types 是函数的签名,也就是函数类型,包含几个参数,每个参数的类型,以及返回值的类型,看这样一个类

@interface NSMethodSignature : NSObject {
@private
    void *_private;
    void *_reserved[6];
}

+ (nullable NSMethodSignature *)signatureWithObjCTypes:(const char *)types;
@property (readonly) NSUInteger numberOfArguments;
- (const char *)getArgumentTypeAtIndex:(NSUInteger)idx NS_RETURNS_INNER_POINTER;
@property (readonly) NSUInteger frameLength;
- (BOOL)isOneway;
@property (readonly) const char *methodReturnType NS_RETURNS_INNER_POINTER;
@property (readonly) NSUInteger methodReturnLength;
@end

这个类就是函数签名类,包含参数的数量,每个参数的类型,函数返回值类型

×

纯属好玩

扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

文章目录
  1. 1. 关于方法和函数
    1. 1.1. 方法
      1. 1.1.1. Objective-c中方法
    2. 1.2. 函数