iOS开发中,存储属性和计算属性详解

280 阅读2分钟

在 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 方法

使用场景

  • 存储属性:需要持久化存储数据的场景(如用户信息、配置参数)。
  • 计算属性:依赖其他属性动态计算的场景(如格式化输出、数据转换)。