在objective-c(运行linux)中,假设我有一个方法-A调用方法-B而在方法-B内调用return;
。
a {
//stuff
[self b];
//stuff
}
b {
//stuff
return;
//stuff
}
当我在方法B中调用return
时,它仍将完成方法“A”的其余部分(父方法)。但是,如果我需要返回调用方法B的方法(父方法,方法-A),该怎么办?
Objective-C是否具有superReturn;
或returnAll;
类型的功能?现在我只是设置我在方法-A中调用方法-B之后检查的BOOL。
我假设有一些方法可以直接访问堆栈跟踪w / linux命令并返回all。也许一些线程命令也只存在return;
当前线程。
答案 0 :(得分:0)
如果不存在内置的superReturn;
,则块可能是一种按需控制此流的好方法,并且不会产生负面影响。
-(void)viewDidLoad {
[self methodA];
}
-(void)methodA {
NSLog(@"1");
NSLog(@"2");
__block BOOL superReturn;
[self methodB:^(NSNumber * _Nullable shouldSuperReturn) {
if (shouldSuperReturn) {
superReturn = [shouldSuperReturn boolValue];
}
}];
if (superReturn) {
return;
}
NSLog(@"3");
NSLog(@"4");
}
-(void)methodB:(void(^)(NSNumber * _Nullable shouldSuperReturn))superReturn; {
NSLog(@"a");
NSLog(@"b");
superReturn(@(YES));
return;
NSLog(@"c");
NSLog(@"d");
}
//Logs 1,2,a,b.
注意:带NSNumber类型的Nullable标志是可选的。假设BOOL不能将值传递回该块,则无论如何都将导致NO,这可以实现。