结构体:
C语言允许用户自己指定这样一种数据结构,它由不同类型的数据组合成一个整体,以便引用,这些组合在一个整体中的数据是互相联系的,这样的数据结构称为结构体,它相当于其它高级语言中记录。
声明一个结构休类型的一般形式如下:
struct 结构体名
{成员列表};
结构体名,用作结构体类型的标志,它又称 结构体标记,大括号内是该结构体中的各个成员,由它们组成一个结构体,对各成员都应进行类型声明如:
类型名 成员名;
结构体使用:
(1)先声明结构体类型再定义变量名
如上面已定义了一个结构体类型 struct student,可以用它来定义变量。如:
struct student //结构体类型名
student1, student2//结构体变量名
定义了 student1, student2 为 struct student 类型的变量。
在定义了结构体变量后,系统会为之分配内存单元。
(2)它的作用与第一种方法相同,即定义了两个 struct student 类型的变量 student1, student2 这种形式的定义的一般形式为
struct 结构体名
{
成员表列
}变量名表列;
(3)直接定义结构类型变量
其一般形式为
struct
{
成员表列
}变量名表列;
即不出现结构体名。
类(class):
类是具有相似内部状态和运动规律的实体的集合(或统称、抽象)。类的概念来自于人们认识自然、认识社会的过程。在这一程中,人们主要使用两种方法:由特殊到一般的归纳法和由一般到特殊的演绎法。在归纳的过程中,我们从一个个具体的事物中把共同的特征抽取出来,形成一个一般的概念,这就是”归类”;如:昆虫、狮子、爬行动物,因为它们都能动所以归类为动物。在演绎的过程中我们又把同类的事物,根据不同的特征分成不同的小类,这就是”分类”;如动物->猫科动物->猫->大花猫等。对于一个具体的类,它有许多具体的个体,我们就管这些个体叫做”对象”。类的内部状态是指类集合中对象的共同状态;类的运动规律是指类集合中对象的共同运动规律。如:博拉图对人作如下定义:人是没有毛能直立行走的动物。在博拉图的定义中”人”是一个类,具有”没有毛、直立行走”等一些区别于其它事物的共同特征;而张三、李四、王五、流氓陈水扁等一个个具体的人,是”人”这个类的一个个”对象”。
对象(object):
即指现实世界中各种各样的实体。它可以指具体的事物也可以指抽象的事物。如:整数1、2、3、流氓陈水扁、苹果、飞机、规则、法律、法规、表单等等。每个对象皆有自己的内部状态和运动规律,如流氓陈水扁具有名字、身高、体重等内部状态,具有吃饭、睡觉、打人、偷税、漏税等运动规律。在面向对象概念中我们把对象的内部状态称为属性、运动规律成为方法或事件。
1、类也是一个对象,是Class类型的对象,简称“类对象”,类名就代表着类对象,每个类只有一个类对象。
2、Class类型的定义
typedef struct objc_class *Class;
根据类的定义来看其实类本事也是一个结构体
3、获得类对象的方式
// 第一种方式 通过类名获得
Class c = [Person class];
// 第二种方式 通过类的对象获得
Person *p = [[person alloc] init];
Class c = [p class];
注意:根据第二条的定义Class已经包含了* 所以在使用的时候不需要再加*
4、调用类方法的方式
// 第一种方式 通过类名调用类方法
Person *p = [Person new];
// 第二种方式 通过类对象名调用类方法
Class c = [Person class];
Person *p = [c new];
OC方法和函数的区别:
OC方法只能声明在@interface和@end之间,只能实现在@implementation和@end之间。也就是说OC方法不能独立于类存在
C函数不属于类,跟类没有联系,C函数只归定义函数的文件所有
低级错误:方法有声明,但是实现的时候写成了函数
OC中类方法必须使用+(加号)开头。类方法是属于类对象的,所以无需创建类的实例对象我们就可以直接使用它们。类方法中的self指的是这个类,在类方法中self只能调用这个类的类方法(包括这个类的所有的类方法都可以调用)。
OC中对象方法必须使用-(减号)开头。类方法必须由类的实例对象来调用,在类方法中可以通过self指针访问类的成员变量,也可以调用类的对象方法(包括这个类的所有的对象方法都可以调用)。