Проходит ли вызов метода протокола управление потоком программ? - PullRequest
1 голос
/ 28 октября 2010

Я знаю, что это, возможно, неубедительный вопрос, но я вытащил три последовательных ночи и я очень размытый.И я новичок в 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 в объекте, который вызвал это) или поток продолжается через POINT B к POINT C?

Я надеюсь на первое, потому что я могу упростить черт из своего кода, в настоящее время неприятный беспорядок глубоко вложенных if и elses.

1 Ответ

5 голосов
/ 28 октября 2010

Когда возвращается -didTheRequestedThing: метод, поток управления возвращается обратно к вашей POINT A и продолжается до POINT B и POINT C. Вызовы методов делегата точно такие же, как и любой другой вызов метода. Если вы хотите избежать выполнения остальной части метода после вызова делегата, просто прикрепите вызов к return, где ваш // POINT A комментарий.

...