我知道这很可能是一个蹩脚的问题,但是我已连续三次全力以赴,而且我非常模糊。我是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 在调用此对象的对象中使用strong>委托方法,还是通过POINT B继续流到POINT C?
我希望前者是因为我可以简化我的代码,目前是一堆令人不快的深层嵌套ifs和elses。
答案 0 :(得分:5)
当-didTheRequestedThing:方法返回时,控制流返回到POINT A并继续到POINT B和POINT C.委托方法调用与任何其他方法调用完全相同。如果你想在委托调用之后避免执行方法的其余部分,只需调用你的// POINT A注释所在的return
。