Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective-C类别的安全性如何?_Objective C - Fatal编程技术网

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

Objective-C类别的安全性如何?,objective-c,Objective C,Objective-C类别非常有用,但这种功能存在一些问题。这些基本上有两种形式,据我所知: 试图添加相同便利方法的两个类别。在这种情况下,未定义使用哪一个。如果您很小心,不要添加太多方法或使用特别常见的方法名,那么第一个问题几乎永远不会成为问题 编写器向类中添加的与类别冲突的新方法。在这种情况下,类别将覆盖类方法。由于班级可能不在我的控制之下,我更担心这个问题 后台移植更改应该是相当安全的,但实现接口或添加方便的方法似乎更危险。我知道Cocoa似乎经常为了方便方法而使用它,但是基类也在那里

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

  • 试图添加相同便利方法的两个类别。在这种情况下,未定义使用哪一个。如果您很小心,不要添加太多方法或使用特别常见的方法名,那么第一个问题几乎永远不会成为问题
  • 编写器向类中添加的与类别冲突的新方法。在这种情况下,类别将覆盖类方法。由于班级可能不在我的控制之下,我更担心这个问题
后台移植更改应该是相当安全的,但实现接口或添加方便的方法似乎更危险。我知道Cocoa似乎经常为了方便方法而使用它,但是基类也在那里受到控制。我认为他们可能只是在使用类别来减少依赖关系——因此字符串类可以使用方便的方法来处理Cocoa,但是如果不使用Cocoa,它就不会被引入


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

我发现它很有用,它包括一个惯例来帮助避免您提到的冲突。

通常,在扩展不受您控制的代码时(例如,Foundation),传统的做法是在方法名上使用前缀或后缀,以避免此类冲突

示例来自:


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

我已经看过好几次了,但我还没有全部读过。我想我应该。
@interface NSObject (PRHPerformOnMainThread)
- (id) performOnMainThread_PRH;
@end