Objective-C分类有多安全?

4

Objective-C的分类非常有用,但是它们也存在一些问题。我知道的主要有以下两种:

  • 两个分类尝试添加相同的便捷方法。在这种情况下,使用哪一个是未定义的。如果你小心一点——不要添加太多方法或使用特别常见的方法名称——第一个问题几乎永远不会成为问题。
  • 一个作者向类中添加与分类冲突的新方法。在这种情况下,分类会覆盖类方法。由于类可能不在我的控制之下,我更担心这个问题。

回溯更改应该是相当安全的,但实现接口或添加便捷方法似乎更加危险。我知道Cocoa似乎经常用它来实现便捷方法,但是基类在他们的控制之下。我认为他们可能只是使用分类来减少依赖性——所以String类可以有方便的方法来处理Cocoa,但如果你不使用Cocoa,它就不会被引入。

那么,分类有多安全/有哪些指导方针可以保证它们的安全性呢?

2个回答

6
通常,在扩展不受您控制的代码(例如Foundation)时,传统做法是在方法名称上使用前缀或后缀,以避免这些冲突。下面是Peter Hosey的主线程执行类别的示例:(链接)
@interface NSObject (PRHPerformOnMainThread)
- (id) performOnMainThread_PRH;
@end

这不是最美观的解决方案,但如果您担心脆弱性,这是一个好主意。


4

我已经看到过几次提到它的引用,但我还没有完全阅读。我认为我应该去读一下。 - Casebash

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接