有人可以向我解释一下 - " Objective-C Classes也是对象"

时间:2015-07-12 05:50:05

标签: ios objective-c

有人可以向我解释一个类如何被称为对象,如其中一个苹果文档页面中所提及的那样#34; Objective-C Classes也是对象"

以下是相同的链接: https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/ProgrammingWithObjectiveC/DefiningClasses/DefiningClasses.html

1 个答案:

答案 0 :(得分:0)

在Objective-C类对象中,参与了两个重要的技术:

  • 您可以引用类对象。在类方法中,self始终引用类对象。
  • 类对象可以接收消息。

当您在编译时不知道该类时,这很有用。 I. e。:

Class aClass = …; // I. e.: Rectangle, Circle, … selected by the user
Shape aShape = [[aClass alloc] init]; // Create a shape

此外,它对于类方法的动态调度很有用。具有:

@interface Shape : NSObject
…
@end

@interface Rectangle : Shape
…
@end

…

@implementation Rectangle
+ (NSUInteger)numberOfAnchorPoints
{
  return 2;
}
@end

@implementatin Shape
+ (void)doSomething
{
  NSUInteger = [self numberOfAnchorPoints]; // NOT: [Shape numberOfAnchorPoints]
  …
}
@end

拥有一个动态类对象,如:

Class shape = [Rectangle class];
[shape doSomething];
执行子类+doSomething

Rectangle,即使Shape甚至不知道它的子类。

或者,有一个更简单的例子:

@implementation NSObject
+ (id)new
{
  return [[self alloc] init]; // self points to the receiver, not to NSObject
}
@end

…

Custom* custom = [Custom new]; // The receiver is the class object of Custom.