Objective-C引用类型和值类型

Objective-C中的变量类型可以分为值类型和引用类型,理解它们的区别很重要。

值类型

值类型变量直接存储值,包含以下类型:

  • 基本数据类型:int、float、double等
  • 枚举类型
  • 结构体

值类型赋值和传递时,会复制整个值:

int a = 10;
int b = a; // a值复制给b

struct Point p1 = {1, 2}; 
struct Point p2 = p1; // p1的值复制给p2

引用类型

引用类型通过指针管理对象,包含:

  • 类对象
  • 块Block
  • 字符串NSString

引用类型赋值或传递时,传递的是对象的指针,两个变量指向同一个对象:

Person *p1 = [[Person alloc] init];
Person *p2 = p1; // p1和p2指向同一对象

[p1 setName:@"Bob"];
NSLog(@"%@", [p2 name]); // 打印Bob

区别

区别在于值类型复制值,引用类型复制指针。

理解这两种类型的区别,可以避免一些错误,比如将引用类型传递到C函数时产生意外修改。