为什么没有办法在Objective C中使用对象进行内省?

Rob*_*Rob 0 reflection introspection objective-c

我已经看到了调用可怕的C函数和获取必须迭代的结构的示例(特别是这里),充满了大量的underbars.

为什么我不能这样做(伪跟随):

  Money *cost = [[Money alloc] init];

  for (Property *property in [[cost class] properties]){
    ..
  }

  for (Method *method in [[cost class] methods]){
    ..
  }
Run Code Online (Sandbox Code Playgroud)

ken*_*ytm 8

这些功能并不可怕.它们都记录在Objective-C运行时参考中.

我认为没有+properties+methods方法的一个原因是因为你很少需要在编译时查找你不知道名字的属性/方法.

在ObjC最有用的自省功能-respondsToSelector:,-isKindOfClass:,-conformsToProtocol:,NSInvocation,KVC,KVO,NS XXXX FromString,他们使用对象操作.

  • @Rob :( 1)不是一个协议,一个方法,如鸭子打字.(2)不要将Java与ObjC等同起来.或者,您认为Java中哪些实用,有趣的代码适用于ObjC? (2认同)