相关疑难解决方法(0)

是否有块的SELF指针?

我想以递归方式从内部调用一个块.在一个obj-c对象中,我们使用"self",是否有这样的东西从内部引用块实例?

cocoa objective-c objective-c-blocks

18
推荐指数
3
解决办法
2598
查看次数

异步调度的递归块

假设我运行此代码:

__block int step = 0;

__block dispatch_block_t myBlock;

myBlock = ^{
     if(step == STEPS_COUNT)
     {
         return;
     }

     step++;
     dispatch_time_t delay = dispatch_time(DISPATCH_TIME_NOW, NSEC_PER_SEC / 2);
     dispatch_after(delay, dispatch_get_current_queue(), myBlock);
};

dispatch_time_t delay = dispatch_time(DISPATCH_TIME_NOW, NSEC_PER_SEC / 2);
dispatch_after(delay, dispatch_get_current_queue(), myBlock);
Run Code Online (Sandbox Code Playgroud)

该块从外部调用一次.到达内部调用时,程序崩溃,没有任何细节.如果我在所有地方使用直接调用而不是GCD调度,一切正常.

我也尝试使用块的副本调用dispatch_after.我不知道这是否是朝着正确方向迈出的一步,但这还不足以让它发挥作用.

想法?

iphone objective-c grand-central-dispatch objective-c-blocks

10
推荐指数
3
解决办法
4342
查看次数

当出局时,"_ _ lock"变量导致nil值

我想使用__block变量来获取块中的值.但是当阻塞时,__block变量似乎是零.为什么会这样?

    NSString *fileName = [Tools MD5Encode:url];
    __block NSString *filePath = nil;
    [fileList enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
        NSString *aFileName = obj;
        if ([aFileName isEqualToString:fileName]) {
            NSString *path = [VERSIONS_INFO_DATA_DIRECTORY stringByAppendingPathComponent:aFileName];
            filePath = path;
            NSLog(@"filePath1 %@", filePath);
            *stop = YES;
        }
    }];
    //NSLog(@"filePath2 %@", filePath);
    //filePath seems to be nil
    return filePath;
Run Code Online (Sandbox Code Playgroud)

当我将代码更改为[路径复制]时,它可以工作.但我不知道这是不是一个好主意.任何决定?

    NSString *fileName = [Tools MD5Encode:url];
    __block NSString *filePath = nil;
    [fileList enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
        NSString *aFileName = obj;
        if ([aFileName isEqualToString:fileName]) { …
Run Code Online (Sandbox Code Playgroud)

objective-c objective-c-blocks automatic-ref-counting

5
推荐指数
2
解决办法
903
查看次数