【发布时间】:2016-01-22 02:08:21
【问题描述】:
数据封装,或者我喜欢称之为,谁拥有它,谁需要知道它,构成了很多面向对象的编程。需要知道的人通常会被访问器方法所满足,但是如果它们都导致 objc_msgsend 只是为了读取一个变量,那么这些方法就会变得非常昂贵。 C++ 用内联方法解决了这个问题——在定义之前使用“inline”关键字,或者在类声明中定义方法,编译器将访问器代码放在调用者的代码中,节省了与实际函数调用相关的开销。
class IntWrapper {
public:
int getInt() { return anInt; }
protected:
int anInt;
};
Objective-C 中的编译器错误会奖励类似的语法。在 Xcode 中搜索了语言指南(“[Object-Oriented] Programming with Objective-C”),我没有看到任何与方法的“内联”相关的参考。 Objective-C中是否有内联之类的东西?是不是叫别的东西?如果有人能指出我引用内联的文档,非常感谢。
使用简单的测试代码:
@interface ClassA : NSObject
{
int anInt;
}
- (int) anInt;
@end
@implementation ClassA
- (int) anInt { return anInt; }
@end
查看使用它的代码的汇编,它看起来像大约 25 条指令。
【问题讨论】:
-
只有 C 函数可以内联,不幸的是 Objective-C 方法不能。
-
您可以在此处了解更多信息:stackoverflow.com/questions/8194504/…
-
值得补充的是,约定是使用
@property来避免声明变量及其访问器的样板。
标签: objective-c inline accessor