Objective-C 中的“委托”是一种常用的设计模式,用于在对象之间进行通信和交互。委托模式允许一个对象委托另一个对象来处理特定的任务或事件,并在适当的时候通知委托方。在 iPhone 开发中,委托模式被广泛应用于视图控制器、表视图和其他 UI 元素之间的交互。
委托模式的核心思想是将任务的实现从一个对象转移给另一个对象,以实现解耦和代码重用。在 Objective-C 中,委托模式通过使用协议(protocol)来定义任务的接口和方法,并通过委托属性来指定委托对象。委托对象需要遵循相应的协议,并实现协议中定义的方法。下面以一个简单的例子来说明委托模式的使用。假设我们有一个名为 `Calculator` 的类,用于进行简单的数学计算。我们希望在计算完成后通知另一个对象来处理结果显示的逻辑。首先,我们需要定义一个协议来描述处理结果显示的方法。我们可以在头文件中声明一个名为 `CalculatorDelegate` 的协议,并声明一个 `displayResult:` 方法:objective-c@protocol CalculatorDelegate接下来,在 `Calculator` 类的头文件中声明一个 `delegate` 属性,并在实现文件中使用该属性来通知委托对象:- (void)displayResult:(NSNumber *)result;@end
objective-c@interface Calculator : NSObject@property (nonatomic, weak) id在上述代码中,`delegate` 属性的类型为 `iddelegate;- (void)calculate;@end@implementation Calculator- (void)calculate { // 计算逻辑... NSNumber *result = @42; // 假设计算结果为 42 [self.delegate displayResult:result];}@end
objective-c@interface ResultDisplayViewController : UIViewController在上述代码中,`ResultDisplayViewController` 是一个视图控制器,它遵循 `CalculatorDelegate` 协议,并实现了 `displayResult:` 方法。在 `viewDidLoad` 方法中,我们创建了一个 `Calculator` 对象,并将 `ResultDisplayViewController` 设置为其委托。当计算完成后,`Calculator` 会调用 `displayResult:` 方法来通知 `ResultDisplayViewController` 对象,从而更新结果显示。通过委托模式,我们可以实现对象之间的松耦合,并使代码更加模块化和可复用。委托模式在 iPhone 开发中被广泛应用于处理用户界面事件、网络请求回调等场景,为应用程序的开发带来了很大的便利性和灵活性。@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