在 iOS 开发中,存储属性和计算属性是两种不同的属性类型,用途和实现方式均有差异。以下是详细说明及代码演示:
存储属性 (Stored Properties)
-
作用:直接存储数据,占用内存空间。
-
特点:
- 可以是变量 (
var) 或常量 (let). - 在 Swift 中可设置默认值,在 Objective-C 中自动合成实例变量。
- 可以是变量 (
Swift 示例
class Person {
// 存储属性
var name: String = "John"
let age: Int = 30
}
Objective-C 示例
// Person.h
@interface Person : NSObject
@property (nonatomic, strong) NSString *name; // 存储属性(自动合成实例变量 _name)
@end
// Person.m
@implementation Person
// 自动合成实例变量 _name 和存取方法
@end
计算属性 (Computed Properties)
-
作用:通过计算动态获取值,不直接存储数据。
-
特点:
- 必须用
var声明(Swift)。 - 需提供
get方法,可选set方法。 - 依赖其他属性进行计算。
- 必须用
Swift 示例
class Circle {
// 存储属性
var radius: Double = 0.0
// 计算属性
var area: Double {
get {
return Double.pi * radius * radius
}
set(newArea) {
radius = sqrt(newArea / Double.pi) // 通过面积反向设置半径
}
}
}
Objective-C 示例
// Circle.h
@interface Circle : NSObject
@property (nonatomic) double radius; // 存储属性
@property (nonatomic) double area; // 计算属性(需手动实现存取方法)
@end
// Circle.m
@implementation Circle
// 存储属性 radius 自动合成实例变量 _radius
// 计算属性 area 的 getter 和 setter
- (double)area {
return M_PI * _radius * _radius;
}
- (void)setArea:(double)area {
_radius = sqrt(area / M_PI); // 通过面积反向设置半径
}
@end
核心区别
| 特性 | 存储属性 | 计算属性 |
|---|---|---|
| 数据存储 | 直接存储数据 | 不存储数据,动态计算 |
| 内存占用 | 是 | 否 |
| Swift 语法 | var/let + 初始值 | var + get/set 块 |
| Objective-C | @property 自动合成实例变量 | 手动实现 getter/setter 方法 |
使用场景
- 存储属性:需要持久化存储数据的场景(如用户信息、配置参数)。
- 计算属性:依赖其他属性动态计算的场景(如格式化输出、数据转换)。