我正在寻找一些关于协议和委派如何在 Objective-C 中工作的额外解释/见解。我有一个正在开发的应用程序,它使用 UINavigationController。有一个主页和一个设置页面,这将允许用户输入一些将用作主页标题的文本。我已经实现并运行了一切,但我只需要澄清它是如何工作的。
这是如何设置的示例:
@interface MainPageViewController : UIViewController
@end
@interface MainPageViewController() <SettingsControllerDelegate>
// properties
@end
@implementation MainPageViewController
- (void)methodThatSetsTitle(NSString *)title
{
self.title = title;
}
@end
......
@protocol SettingsControllerDelegate <NSObject>
{
- (void)methodThatSetsTitle(NSString *)title
}
@interface SettingsViewController
@property (weak, nonatomic) id <SettingsControllerDelegate> delegate;
@end
@interface SettingsViewController ()
// properties that will be used for a text field and holding an NSString
@end
@implementation SettingsViewController
- (void)methodThatPassesStringToDelegateProtocolMethod
{
// Code that will set the property for the NSString title
[self.delegate methodThatSetsTitle:self.titleNameProperty];
}
@end
我的问题是:SettingsViewController 中的 NSString 标题实际上是如何传递给 MainViewController 的?我的想法是,'delegate' 属性被声明为 SettingsControllerDelegate,因此它固有地可以保存协议具有的方法中的信息。然后显然在 MainViewController 中我调用了相同的协议方法,它将只获取参数并将当前导航标题设置为它。关于该参数和方法信息存储在何处以供其他方法调用以获取它,这有点令人困惑。难道每次我调用SettingsViewController方法,'-(void)methodThatPassesStringToDelegateProtocolMethod',只是调用MainViewController中的方法?
(另外在我的代码中,我有一个 prepareForSegue 方法,将 SettingViewController.delegate 设置为 self。)
任何关于如何传递这些信息以及它如何工作的细节的澄清都会很棒!我能理解其中的复杂性,但如果你能以一种全面且易于理解的方式来解释它,那就太好了。我可以理解内存模型等,因此解释它如何在内存中工作将非常有用。
非常感谢!