Objective C 的 iPhone 开发中的“委托”是什么 [复制]

作者:编程家 分类: ios 时间:2025-12-06

Objective-C 中的“委托”是一种常用的设计模式,用于在对象之间进行通信和交互。委托模式允许一个对象委托另一个对象来处理特定的任务或事件,并在适当的时候通知委托方。在 iPhone 开发中,委托模式被广泛应用于视图控制器、表视图和其他 UI 元素之间的交互。

委托模式的核心思想是将任务的实现从一个对象转移给另一个对象,以实现解耦和代码重用。在 Objective-C 中,委托模式通过使用协议(protocol)来定义任务的接口和方法,并通过委托属性来指定委托对象。委托对象需要遵循相应的协议,并实现协议中定义的方法。

下面以一个简单的例子来说明委托模式的使用。假设我们有一个名为 `Calculator` 的类,用于进行简单的数学计算。我们希望在计算完成后通知另一个对象来处理结果显示的逻辑。

首先,我们需要定义一个协议来描述处理结果显示的方法。我们可以在头文件中声明一个名为 `CalculatorDelegate` 的协议,并声明一个 `displayResult:` 方法:

objective-c

@protocol CalculatorDelegate

- (void)displayResult:(NSNumber *)result;

@end

接下来,在 `Calculator` 类的头文件中声明一个 `delegate` 属性,并在实现文件中使用该属性来通知委托对象:

objective-c

@interface Calculator : NSObject

@property (nonatomic, weak) id delegate;

- (void)calculate;

@end

@implementation Calculator

- (void)calculate {

// 计算逻辑...

NSNumber *result = @42; // 假设计算结果为 42

[self.delegate displayResult:result];

}

@end

在上述代码中,`delegate` 属性的类型为 `id`,表示它可以引用任何遵循 `CalculatorDelegate` 协议的对象。在 `calculate` 方法中,我们通过调用 `delegate` 对象的 `displayResult:` 方法来通知委托对象。

现在,我们可以创建一个遵循 `CalculatorDelegate` 协议的对象,并将其设置为 `Calculator` 的委托。这个对象将负责处理结果显示的逻辑。

objective-c

@interface ResultDisplayViewController : UIViewController

@property (nonatomic, weak) IBOutlet UILabel *resultLabel;

@end

@implementation ResultDisplayViewController

- (void)viewDidLoad {

[super viewDidLoad];

Calculator *calculator = [[Calculator alloc] init];

calculator.delegate = self;

[calculator calculate];

}

- (void)displayResult:(NSNumber *)result {

self.resultLabel.text = [NSString stringWithFormat:@"Result: %@", result];

}

@end

在上述代码中,`ResultDisplayViewController` 是一个视图控制器,它遵循 `CalculatorDelegate` 协议,并实现了 `displayResult:` 方法。在 `viewDidLoad` 方法中,我们创建了一个 `Calculator` 对象,并将 `ResultDisplayViewController` 设置为其委托。当计算完成后,`Calculator` 会调用 `displayResult:` 方法来通知 `ResultDisplayViewController` 对象,从而更新结果显示。

通过委托模式,我们可以实现对象之间的松耦合,并使代码更加模块化和可复用。委托模式在 iPhone 开发中被广泛应用于处理用户界面事件、网络请求回调等场景,为应用程序的开发带来了很大的便利性和灵活性。