“返回;”堆栈跟踪中的父方法

时间:2017-05-30 17:39:22

标签: ios objective-c linux multithreading methods

在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;当前线程。

1 个答案:

答案 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,这可以实现。