假设我们在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
?
如果我们声明一些成员函数,那么它们将存储在哪里。
答案 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()
或某些变体实现。