其中static / class方法存储在objective c中

时间:2013-12-19 14:18:53

标签: objective-c oop static-methods class-method

假设我们在MyClass.h文件中按如下方式声明了一个类,如下所示。

#import <Foundation/Foundation.h>

@interface MyClass : NSObject


+(void)aClassMethod;

@end

并在MyClass.m文件..

@implementation MyClass

+(void)aClassMethod{

NSLog(@"It is a Class method");

}
@end

我的问题是在编译之后会存储这个aClassMethod? 如果我们声明一些成员函数,那么它们将存储在哪里。

2 个答案:

答案 0 :(得分:3)

Objective-C方法被编译成C函数,它们与程序定义的任何其他C函数一起存储在程序的Text段中。对于类和实例方法都是如此。

答案 1 :(得分:3)

  

实际上我想知道哪个类方法存储在堆栈,代码或数据段中?什么任务由编译器完成   处理类方法?

这个问题并不完全有意义。

可执行代码存储在存储所有可执行代码的位置;在mach-o TEXT细分市场。代码在只读,可执行的内存页面上映射到内存中。内存无法进行读写(即您无法在内存中编辑可执行文件)。

Objective-C方法是标准的C函数,总是带两个参数; self_cmd

调用约定而言,代码的调用与任何其他C函数一样。唯一的区别是将调用站点([NSObject new])与要调用的可执行代码匹配的方法调度机制。匹配是通过Objective-C messenger完成的,由objc_msgSend()或某些变体实现。