0

ほとんどの場合、私はこれを行っています:

self.someVC = [myVC alloc] initWithFrame:frame];
self.someVC.delegate = self;

デリゲート変数を自動的に設定する方法はありますか?

-(void)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
         self.delegate = [the object that is calling initWithFrame];
..
4

3 に答える 3

1

いいえ、これは不可能です。コール スタックなどを検査する必要がありますが、これはお勧めしません。このための標準的な設備はありません。

たとえそれが可能だったとしても、それは悪い考えです。依存関係が明確になり、コードを読んでいる人を混乱させないように、通常どおりコンストラクターまたはプロパティ インジェクションを使用する必要があります。

于 2013-04-08T14:32:00.887 に答える
0

デリゲート オブジェクトをパラメーターとして受け取るカスタム初期化子を追加します。

このような:

-(void)initWithFrame:(CGRect)frame delegate:(id)delegate
{
    self = [super initWithFrame:frame];
    if (self) {
         self.delegate = delegate;
..
于 2013-04-08T14:35:58.857 に答える
0

いつでも新しい initWithFrame メソッドを提供できます。

- (id)initWithFrame:(CGRect) aFrame delegate:(id)aDelegate {
    self = [super initWithFrame:aFrame];
    if (self) {
        self.delegate = aDelegate;
    }
    return self;
}
于 2013-04-08T14:36:16.577 に答える