结构体:

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指针访问类的成员变量,也可以调用类的对象方法(包括这个类的所有的对象方法都可以调用)。

OC的方法注意:
方法只有声明,没有实现(经典错误)
方法没有声明,只有实现(编译器警告,但是能调用,OC的弱语法)

编译的时候:访问没有的成员变量直接报错,访问没有的方法,只是警告

结构体 类 对比:

结构体与类的区别主要在于数据的隐藏性,在结构体中所有的数据都是可以被访问的,而类中有的却不能够访问,这是最主要的区别,像继承、多态什么的就是类的特性了,还有就是结构体不可以有方法,而中可以有方法。

(来源: https://blog.csdn.net/a72524/article/details/46042467)

posted on 2018-11-08 21:29  落以零  阅读(4846)  评论(0编辑  收藏  举报