代码之家  ›  专栏  ›  技术社区  ›  Casebash

目标C类别的安全性如何?

  •  4
  • Casebash  · 技术社区  · 14 年前

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

    • 两个类别试图添加相同的便利方法。在这种情况下,不确定使用哪一个。如果您很小心(不要添加太多的方法或使用特别常见的方法名称),第一个问题几乎不应该是问题。
    • 与类别冲突的编写器正在将新方法添加到类中。在这种情况下,类别将重写类方法。由于这门课可能不在我的控制之下,我更担心这个问题。

    反向移植更改应该相当安全,但实现接口或添加方便方法似乎更危险。我知道cocoa似乎经常将它用于方便的方法,但接着基类又在那里受到控制。我认为他们可能只是使用类别来减少依赖性——所以字符串类可以有在Cocoa中工作的方便方法,但是如果不使用Cocoa,它就不会被拉入。

    那么,类别有多安全/有什么准则来保证它们的安全?

    2 回复  |  直到 14 年前
        1
  •  6
  •   Colin Barrett    14 年前

    通常,当扩展代码不在您的控制之下(例如基础)时,使用方法名称上的前缀或后缀来避免这些类型的冲突是传统的。

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

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

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

        2
  •  4
  •   nall    14 年前

    我找到了 Google Objective-C Style Guide 很有用,它包括一个惯例来帮助避免您提到的碰撞。