返回

OC中类的结构分析

IOS

1. 类定义

类定义是创建类的语法结构,它指定了类的名称、属性和方法。类定义通常由以下部分组成:

  • @interface:类声明的开始标志。
  • 类名:类的名称。
  • 属性声明:声明类的属性,包括属性的类型和访问权限。
  • 方法声明:声明类的实例方法和类方法,包括方法的名称、参数和返回值类型。
  • @end:类声明的结束标志。

例如:

@interface Person : NSObject
{
  NSString *_name;
  int _age;
}

- (void)setName:(NSString *)name;
- (NSString *)name;

- (void)setAge:(int)age;
- (int)age;

- (void)sayHello;
@end

2. 成员变量

成员变量是类的实例变量,它们属于类的每个对象。成员变量可以是任何数据类型,包括基本数据类型和对象类型。成员变量在类定义的 @interface 部分声明,并在对象创建时分配内存。

例如,在上面的 Person 类中,_name_age 就是两个成员变量。

3. 方法

方法是类的行为,它定义了对象可以执行的操作。方法可以是实例方法或类方法。实例方法可以操作对象本身的数据和行为,而类方法可以操作整个类的数据和行为。

方法在类定义的 @interface 部分声明,并在对象创建时分配内存。方法的实现放在类定义的 @implementation 部分。

例如,在上面的 Person 类中,setName:namesetAge:agesayHello 都是方法。

4. 构造函数

构造函数是用于初始化对象的特殊方法。构造函数在对象创建时自动调用。构造函数的名称与类名相同,并且没有返回值类型。

构造函数可以有多个参数,这些参数用于初始化对象的成员变量。

例如,在上面的 Person 类中,- (instancetype)initWithName:(NSString *)name age:(int)age 就是一个构造函数。

5. 析构函数

析构函数是用于销毁对象的特殊方法。析构函数在对象销毁时自动调用。析构函数的名称与类名相同,并且没有返回值类型。

析构函数可以有多个参数,这些参数用于清理对象的资源。

例如,在上面的 Person 类中,- (void)dealloc 就是一个析构函数。

6. 继承

继承允许一个类从另一个类继承属性和方法。子类可以继承父类的所有属性和方法,并且可以添加自己的属性和方法。

例如,在下面的代码中,Student 类继承了 Person 类:

@interface Student : Person
{
  NSString *_studentID;
}

- (void)setStudentID:(NSString *)studentID;
- (NSString *)studentID;

- (void)study;
@end

7. 多态

多态是允许子类对象以与父类对象相同的方式进行操作。例如,在上面的代码中,Person 类的 sayHello 方法可以被 Student 类的对象调用。

8. 内存布局

OC 中的类在内存中以以下方式布局:

  • 对象头:对象头存储了对象的类型信息和指向元类的指针。
  • 实例变量:实例变量存储了对象的属性值。
  • 方法表:方法表存储了对象的方法指针。

对象的内存布局如图所示:

+---------------------------+
| 对象头                   |
+---------------------------+
| 实例变量                   |
+---------------------------+
| 方法表                   |
+---------------------------+

9. 总结

OC 中的类具有独特结构和特性,包括类定义、成员变量、方法、构造函数、析构函数、继承、多态和内存布局。本文详细分析了 OC 中类的组成部分,帮助你更好地理解和使用类。