0

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 にどのように渡されるのかということです。私の考えでは、「デリゲート」プロパティは SettingsControllerDelegate として宣言されているため、プロトコルが持つメソッドからの情報を本質的に保持できます。次に、明らかに MainViewController で同じプロトコル メソッドを呼び出します。このメソッドは、パラメーターを取り、現在のナビゲーション タイトルをそれに設定します。そのパラメーターとメソッドの情報がどこに保存され、他のメソッド呼び出しがそれを取得するかについては、少し混乱します。SettingsViewController メソッド「- (void)methodThatPassesStringToDelegateProtocolMethod」を呼び出すたびに、MainViewController でメソッドを呼び出すだけですか?

(私のコードにも、SettingViewController.delegate を self に設定する prepareForSegue メソッドがあります。)

この情報がどのように渡されるか、およびそれがどのように機能するかについての詳細を明確にすることは素晴らしいことです! 複雑さは理解できますが、全体論的で理解しやすい方法で説明していただければ幸いです。メモリモデルなども理解できるので、これがメモリ内でどのように機能するかについての説明は非常に役立ちます。

どうもありがとうございました!

4

1 に答える 1