Eph*_*era 0 c objective-c objective-c-runtime
我知道这个想法完全打破了封装,但是说我有以下类扩展:
@interface MyClass () {
int reallyImportantIvar;
}
// ...
@end
Run Code Online (Sandbox Code Playgroud)
通常,类的行为应该在Objective-C层内部 - 发送和接收消息等.但是有一个('公共')子例程,我需要最好的性能和非常低的延迟,所以我更喜欢使用一个C方法.当然,如果我这样做,我就无法再访问reallyImportantIvar,这是我的性能关键任务的关键.
看来我有两个选择:
我的问题是:选项2是否可能,如果可行,它的开销是多少?(例如,我还在查看O(n)算法来查找类的实例变量吗?)
实际上,如果C函数的定义@implementation在类的块内,那么它可以通过通常的object->someIvar表示法访问该类的私有ivars .因此,虽然您可以使用运行时来访问它,但我认为您不需要.只需@implementation在相关类的块中实现该函数,您应该没问题.
另一种方法是将ivar声明为@package或@public.然后在类的实现之外的代码可以#include类扩展可以使用ivar.
@public允许任何代码这样做.@package将范围限制为与类的实现相同的二进制文件,这通常适用于编写共享库时.
| 归档时间: |
|
| 查看次数: |
1033 次 |
| 最近记录: |