2

我正在寻找类似于 Java 中的属性的东西,以便在 Objective-C 环境中使用。

假设我有一个定义了一堆方法的实现文件。有什么方法可以标记它们,以便在运行时通过自省找到它们?就像是;

##special_method
- (void)foo
{

}

##special_method
- (void)bar
{

}

// Not special
- (void)baz
{

}

据我所知,什么都不存在,所以我最好的想法是在方法名称前加上一些常见的前缀:

- (void)_special_foo
{

}

- (void)_special_bar
{

}

// Not special
- (void)baz
{

}

还有其他有趣的想法吗?

4

4 回答 4

1

苹果建议识别私有方法是给一个唯一的前缀:

Cocoa 框架中的大多数私有方法的名称都有一个下划线前缀(例如,_fooData)来将它们标记为私有。从这个事实可以得出两个建议。

  • 不要使用下划线字符作为私有方法的前缀。Apple 保留此约定。

  • 如果您正在继承一个大型 Cocoa 框架类(例如NSViewor UIView),并且您想绝对确定您的私有方法的名称与超类中的名称不同,您可以在私有方法中添加自己的前缀。前缀应尽可能唯一,可能基于您的公司或项目,格式为“XX_”。因此,如果您的项目名为 Byte Flogger,则前缀可能是BF_addObject:

我想您可以使用类似的方案将某些方法标记为特殊的某种运行时操作。

于 2012-10-27T10:49:50.643 回答
1

我不确定我是否正确理解了您的问题,但作为一个“有趣”的可能解决方案,您可以使用一个全局变量,该变量设置为唯一值,在进入时标识特定函数(并可选择在退出时重置),或者您可以使用堆栈来跟踪您可以随时检查的这些值。

于 2012-10-27T11:05:53.847 回答
0

不要以单个前导下划线开头任何方法名称。这是 Apple 内部的编码约定,以防止他们的方法名称与您的方法名称冲突。如果要区分方法名称,只需使用通用前缀。

于 2012-10-27T10:34:03.357 回答
0

既然你正在实现这个类,为什么不直接定义一个返回该类中特殊方法列表的方法呢?如果你需要做子类,让他们获取父类的列表并添加到它。

于 2012-10-31T00:26:46.077 回答