目标c中的方法类做了什么

时间:2013-12-06 17:24:36

标签: ios objective-c

这可能是一个愚蠢的问题。我通过研究代码来学习目标C(iOS),并且我遇到了表达式

[InstanceName class];

它做了什么?

我试图搜索类方法,但它只是弹出类方法和实例方法等之间的区别。我想它可能会给出某种类对象,但我不知道该语句的目的是什么。

原始代码是使用FB SDK的样本Facebook应用程序(美味)....

4 个答案:

答案 0 :(得分:2)

它获取对象的类。

例如,如果InstanceName是类Foo的实例

[InstanceName class];会在Foo

类型的变量中返回Class

您可以使用class_getClassName从此类中获取NSString进行记录。

答案 1 :(得分:2)

如果您将此类内容视为独立表达式....

[InstanceName class];

...然后代码很可能强制在所述类上执行+initialize方法。第一次在类上调用任何方法时,+initialize方法将在运行时之前调用。因此,请查看InstanceName,看看它是否有+initialize方法。

请注意,强制+initialize以这种方式执行是设计糟糕的明确标志。永远不需要像这样强迫+initialize,并且不应该有执行顺序依赖。


这一行代码可能存在的合理的其他原因。通过引用带有硬引用的InstanceName,它将强制链接器链接到库中的所有符号。 (如果您没有对库中至少一个符号的硬引用 - .a - 某些链接器将完全从链接单元中删除库。)

答案 2 :(得分:1)

class是从NSObject继承的方法。它允许您获取类对象的实例,该实例表示调用该方法的实例的类。

它可用于检查当前对象的元数据。例如,您可以使用class方法来确定给定对象是否属于特定类:

if ([sender isKindOfClass:[UIButton class]]) {
    ...
}

答案 3 :(得分:1)

它返回对象的类。假设您创建了一个UIView个子类的数组,并且您只想对属于某个类的人执行某些操作。您可以遍历数组并检查每个对象的类:

for (id view in myViews) {
  if ([view isKindOfClass:[MyUIViewSubclass class]]) {
     // Do something
  }
}