1

私はこれがおそらく不十分な質問であることを知っていますが、私は3回連続して徹夜をしましたが、私は非常にぼんやりしています. そして、Objective C と Cocoa Touch は初めてです。

デリゲート メソッドを提供するクラスを作成しました。詳細は重要ではないため、単純化したサンプル コードを使用します。ヘッダー ファイルは次のようになります。

#import <Foundation/Foundation.h>

@protocol UsernameCheckerDelegate <NSObject>
@required
- (void)didTheRequestedThing:(BOOL)wasSuccessful;
@end

@interface TheDelegateClass : NSObject {
    id <TheDelegateClassDelegate> tdcDelegate;
}

@property (assign) id <TheDelegateClassDelegate> tdcDelegate;

- (void)methodThatDoesSomething:(int)theValue;

@end

ソースファイルは次のようになります。

#import "TheDelegateClass.h"

@implementation TheDelegateClass

@synthesize tdcDelegate;

- (void)methodThatDoesSomething:(int)theValue {
    if (theValue > 10) {
        [[self tdcDelegate] didTheRequestedThing:NO];
        // POINT A
    }

    // POINT B
    int newValue = theValue * 10;
    NSString *subject = [NSString stringWithFormat:@"Hey Bob, %i", newValue];
    // Some more stuff here, send an email or something, whatever

    [[self tdcDelegate] didTheRequestedThing:YES];
    // POINT C
}

@end

ここに私の質問があります: theValueが実際に 10 より大きく、POINT A の上の行が実行される場合、プログラム フロー制御はこのメソッドから渡されますか (そして、これを呼び出したオブジェクトのdidTheRequestedThingデリゲート メソッドに戻ります)、またはフローはそのまま続行しますか? B点からC点?

私は前者を望んでいます。なぜなら、現在、深くネストされたifとelseの不快な混乱である私のコードの全体を単純化できるからです。

4

1 に答える 1

5

-didTheRequestedThing: メソッドが戻ると、制御フローは POINT A に戻り、POINT B と POINT C に進みます。デリゲート メソッドの呼び出しは、他のメソッド呼び出しとまったく同じです。デリゲート呼び出しの後に残りのメソッドを実行したくない場合はreturn、 // POINT A コメントがある場所に呼び出しを貼り付けます。

于 2010-10-28T04:56:12.880 に答える