Objective-C中的类对象和实例变量

And*_*ndy 4 class object objective-c instance-variables instance

我很难绕过这个概念.我将从书中准确地引用这句话:

类对象也从层次结构中的上层类继承.但是因为它们没有实例变量(只有实例),所以它们只继承方法.

如果我错了,请纠正我,但是一个类对象是这样的:

NSString *aString = [[NSString alloc]initWithString:@"abc.."];
Run Code Online (Sandbox Code Playgroud)

在这种情况下,类对象是*aString- 到目前为止我是否正确?

令我困惑的是上面引用中的第二句,"但是因为它们没有实例变量(只有实例),所以它们只继承方法."

我认为一个对象(在这种情况下*aString)是NSString该类的实例.上面的第二句意味着一个实例是不同的.这对我没有任何意义.

Dav*_*ong 6

你错了.

NSString *aString = [[NSString alloc] initWithString:@"abc..."];
Run Code Online (Sandbox Code Playgroud)

在这一行中,我们从左到右:

  • 一种: NSString *
  • 变量名称: aString
  • 作业
  • Class:NSString
  • 调用类方法: +alloc
  • 在类方法的返回值上调用实例方法: -initWithString:
  • 作为参数传递给实例方法的对象: @"abc..."

在Objective-C中,a Class实际上是一种对象.您可以通过许多与实例相同的方式与它们进行交互,但由于它们是"类",因此它们不能具有实例变量(因为实例变量,根据定义,仅适用于实例). Classes只有方法.它们继承自其他Classes,这就是对象继承的实现方式.

有关这方面的更多信息,请查看Greg Parker撰写的这篇精彩博文:http://www.sealiesoftware.com/blog/archive/2009/04/14/objc_explain_Classes_and_metaclasses.html