我试图在 Objective-C 类别与 Java 和 Ruby 中的功能之间进行比较。请看看这些结论是否准确——
即使您无权访问该类的源代码,Objective-C 类别也会向现有类添加新方法。Java 没有类似的东西,但在 Ruby 中,您可以“打开”任何类,包括像 String 这样的核心语言类。
class String
def my_new_method
"new test method"
end
end
"some string".my_new_method
=> "new test method"
同样在 Objective-C 中 - 您可以使用类别“重新打开” NSString 类。
#import "NSString+ForTest.h"
@implementation NSString (ForTest)
-(NSString*) myNewMethod {
return @"new test method";
}
@end
但是,我看到的一个区别是,在 Ruby 中,一旦在运行时中打开和修改了一个类,该类的所有后续使用都会受到影响,换句话说,这是一个系统范围的更改,而在 Objective-C 中只有代码导入此头文件(和任何子类)会受到影响。还有其他区别吗?