Object是否与Class的实例相同?

时间:2012-04-24 22:25:48

标签: objective-c oop terminology

我正在学习Objective-C,我对一个类的实例和一个对象之间的区别感到困惑 - 它们是否相同?

以下是一个例子:

 NSString *name = [[NSString alloc]initWithString:@"Harry"]; 

*name是指向NSString类的指针。 @"Harry"是字符串的值。那么来自name类的NSString是一个对象,还是name被称为类的实例?

第一类的另一个例子:

  Rectangle *rect = [[Rectangle alloc]init];  

所以*rect是一个指针。 rect是一个对象还是一个类的实例?

4 个答案:

答案 0 :(得分:4)

在ObjectiveC中,类的实例始终是一个对象。对象始终是类的实例。 “对象”是类的一个实例,一个类在链的某个地方最终继承自NSObject。声明没有超类的类时,NSObject是隐式超类。

NSString *name = [[NSString alloc] initWithString:@"Harry"]; 

name是指向对象的指针,更具体地说,它是NSString的实例,其值为“Harry”。所有NSString都是对象。

Rectangle *rect = [[Rectangle alloc] init];

同样在这里。 rect是指向对象的指针,该对象是Rectangle的实例。

答案 1 :(得分:3)

  

所以*rect是一个指针。 rect是一个对象还是一个类的实例?

两者都是。一个类的实例也是一个对象,正如我刚刚吃完的McIntosh是“类”Apple的一个实例,也是一个水果。

“对象”是编程结构的通用术语,它保留一些状态(其实例变量)和(通常)可以执行影响该状态(其方法)的操作。类的实例是特定的对象。

在Objective-C中,通过指针访问对象;这只是你与他们互动的机制。严格地说,对象本身和指向对象的指针是不同的:rect是指向对象的指针,类Rectangle的实例,但在日常用语中,你可能会看到人们在谈论它们同样的方式:rectRectangle

答案 2 :(得分:2)

指针不是对象。它只是内存中分配(存储)对象的地址。因此,它指向对象。指针实际上是一个C语言结构,Objective-C继承(原谅双关语)。 Julius是正确的,你会听到它们互换使用,技术上“rect”是实例/对象,“*”传达指针。

答案 3 :(得分:1)

  

感谢您的所有答案,但我仍然有点困惑。所以我们说* rect只是一个指针。 rect是Object(它是Rectangle类中的一个实例)。内存分配给rect。

@pete是的,你说得对。