此变量声明中的类名是什么?

时间:2014-03-16 20:26:29

标签: objective-c

我跟随的Objective-C教程创建了一个名为Square的类和一个Square的新实例,将其分配给名为square的变量,如此:

Square *square = [[Square alloc] init]; 

现在根据我的理解,这是正在发生的事情。

这是创建类Square的一个实例并将其返回;然后初始化返回的实例,并将其设置为变量square

*square = [[Square alloc] init]; 

我无法弄清楚为什么第一个" Square"需要在这个或它正在做什么。

3 个答案:

答案 0 :(得分:3)

Square *square = [[Square alloc] init]; 
  (1)     (2)       (3)    (4)    (5)

(1)是对象的类型,因此创建的实例属于Square

类型

(2)是指向该实例的指针。

(3)+(4)是此实例的分配方法,意味着它为此实例分配内存。

(5)是一个初始化方法,你可以自己实现,例如,将square的宽度设置为1.0

答案 1 :(得分:1)

从初始化行开始:

Square *square = [[Square alloc] init]; 

第二个square变量的名称,这是您稍后在整个代码中引用它的方式。你可以随意调用它。例如(现在不是很明显两个Square都是多余的):

Square *a = [[Square alloc] init]; 

第一个Square是类型的变量类型的对象。编译器将能够通过显示错误和警告来帮助您,并且许多论文都基于对象类型。

你实际上可以这样声明:

void *square = (void *)[[Square alloc] init];

这意味着您使用通用指针类型声明您的变量,但编译器很可能会发出很多警告。

答案 2 :(得分:1)

请注意,*square = [[Square alloc] init];错误,没有类型名称" Square"。 *字符实际上与前一个类型(Square *)相关联,而不是以下变量名称。

原始陈述可以写成:

Square *square;
square = [[Square alloc] init]; 

第一个声明是小写" square"作为Square *类型的变量,其中*表示指向前一类型实体的指针"。 (事实上​​,我更喜欢像Square* square = [[Square alloc] init];一样写它,以明确*与" Square"相关联,但那不是"惯例"。)

应该注意的是,这两个名字之间并没有真正的联系。#34; Square"和" square"。他们可能是"苹果"和"橘子"并且该计划的逻辑将保持不变。第一个是类的名称(按惯例,总是以大写字母开头),第二个是变量的名称(按照惯例,总是以小写字母开头)。