Objective-C类别的安全性如何?

时间:2010-02-20 04:23:28

标签: objective-c

Objective-C类别非常有用,但这种功能存在一些问题。这些基本上有两种形式,我知道:

  • 尝试添加相同便捷方法的两个类别。在这种情况下,未定义使用哪一个。如果你小心 - 不添加太多方法或使用特别常见的方法名称 - 第一个问题几乎不应该是一个问题。
  • 与类别冲突的编写器将新方法添加到类中。在这种情况下,类别会覆盖类方法。由于课程可能不在我的控制之下,我更担心这个问题。

Backporting更改应该相当安全,但实现接口或添加便捷方法似乎更危险。我知道Cocoa似乎将它用于方便方法,但是基类再次受到控制。我想也许他们只是使用类别来减少依赖 - 所以String类可以有方便的方法在Cocoa中工作,但是如果你不使用Cocoa,它就不会被引入。

那么,类别/安全性的指导方法有多安全?

2 个答案:

答案 0 :(得分:6)

通常,在扩展不受您控制的代码(例如Foundation)时,通常在方法名称上使用前缀或后缀来避免这些类型的冲突。

来自Peter Hosey's perform on main thread category的示例:

@interface NSObject (PRHPerformOnMainThread)
- (id) performOnMainThread_PRH;
@end

这不是最美丽的解决方案,但如果你担心脆弱,这是个好主意。

答案 1 :(得分:4)

我发现Google Objective-C Style Guide很有用,它包含一个约定来帮助避免你提到的冲突。