这可能是一个愚蠢的问题。我通过研究代码来学习目标C(iOS),并且我遇到了表达式
[InstanceName class];
它做了什么?
我试图搜索类方法,但它只是弹出类方法和实例方法等之间的区别。我想它可能会给出某种类对象,但我不知道该语句的目的是什么。
原始代码是使用FB SDK的样本Facebook应用程序(美味)....
答案 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
}
}