MST

星途 面试题库

面试题:Objective-C 中协议与委托模式的基本使用

请简述在 Objective-C 中如何定义一个协议,并通过委托模式实现一个简单的视图控制器间的数据传递。请给出关键代码示例。
37.7万 热度难度
编程语言Objective-C

知识考点

AI 面试

面试题答案

一键面试
  1. 定义协议: 在Objective-C中,使用@protocol关键字来定义协议。例如,定义一个用于数据传递的协议DataTransferProtocol
@protocol DataTransferProtocol <NSObject>
// 定义一个方法,用于传递数据,具体方法根据需求定义
- (void)transferData:(NSString *)data;
@end
  1. 在源视图控制器中定义委托属性并传递数据: 假设源视图控制器为SourceViewController
#import <UIKit/UIKit.h>
// 引入定义的协议
#import "DataTransferProtocol.h"

@interface SourceViewController : UIViewController

// 定义委托属性,遵循协议
@property (nonatomic, weak) id<DataTransferProtocol> delegate;

- (IBAction)sendDataButtonTapped:(id)sender {
    NSString *dataToSend = @"Hello, target view controller!";
    // 判断委托是否实现了协议方法,若实现则调用
    if ([self.delegate respondsToSelector:@selector(transferData:)]) {
        [self.delegate transferData:dataToSend];
    }
}
@end
  1. 在目标视图控制器中遵循协议并实现方法: 假设目标视图控制器为TargetViewController
#import <UIKit/UIKit.h>
// 引入定义的协议
#import "DataTransferProtocol.h"

@interface TargetViewController : UIViewController <DataTransferProtocol>

@end

@implementation TargetViewController

- (void)transferData:(NSString *)data {
    NSLog(@"Received data: %@", data);
    // 这里可以对传递过来的数据进行处理,比如更新UI等
}

@end
  1. 设置委托关系: 在合适的地方,比如AppDelegate或者父视图控制器中设置委托关系。
#import "AppDelegate.h"
#import "SourceViewController.h"
#import "TargetViewController.h"

@implementation AppDelegate

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    SourceViewController *sourceVC = [[SourceViewController alloc] init];
    TargetViewController *targetVC = [[TargetViewController alloc] init];
    sourceVC.delegate = targetVC;
    // 后续进行视图控制器的展示等操作
    return YES;
}

@end