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函数时产生意外修改。