代码之家  ›  专栏  ›  技术社区  ›  Matthew Frederick

调用协议方法是否通过程序流控制?

  •  1
  • Matthew Frederick  · 技术社区  · 14 年前

    我知道这很可能是个蹩脚的问题,但我已经连续通宵睡了三次,而且我很模糊。我是新来的目标C和可可触摸。

    我创建了一个提供委托方法的类。我将使用简化的示例代码,因为细节并不重要。头文件如下所示:

    #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
    

    我的问题是:如果 价值 实际上大于10,并且A点以上的线运行,程序流控制是否通过此方法(并返回到 有问题吗? 在调用此的对象中委托方法)或流是否继续通过点B到点C?

    我之所以希望前者,是因为我可以简化代码的检查过程,而目前这是一个令人不快的、嵌套很深的ifs和else的混乱局面。

    1 回复  |  直到 14 年前
        1
  •  5
  •   Lily Ballard    14 年前

    当-didtreequestedthing:方法返回时,控制流返回到点A并继续返回到点B和点C。委托方法调用与任何其他方法调用完全相同。如果要避免在委托调用后执行该方法的其余部分,只需将调用 return 您的//点注释在哪里。