Objective c 在块中初始化后,iOS NSObject nil

Objective c 在块中初始化后,iOS NSObject nil,objective-c,ios,cocoa-touch,cocoa,objective-c-blocks,Objective C,Ios,Cocoa Touch,Cocoa,Objective C Blocks,我在块内创建了一个NSObject。根据以下代码: __block NSObject *myObject; [self myMethod:^{ myObject = [[NSObject alloc] init]; .... }]; if(myObject == nil){ NSLog(@"Why is my object nil?!"); } 在myMethod的定义中,我有以下几点: backgroundQueue = dispatch_queue_crea

我在块内创建了一个NSObject。根据以下代码:

__block NSObject *myObject;

[self myMethod:^{
    myObject = [[NSObject alloc] init];
    ....
}];

if(myObject == nil){
    NSLog(@"Why is my object nil?!");
}
myMethod
的定义中,我有以下几点:

  backgroundQueue = dispatch_queue_create("backgroundqueue", NULL);

            dispatch_async(backgroundQueue, 
                           ^{

                               dispatch_async(dispatch_get_main_queue(), 
                                              ^{
                                                  if(block){
                                                      block();//Never called.
                                                  }
                                              });

然而,块从未被调用

这里的问题是,您似乎从未执行实例化
myObject
的块。如需说明,请运行以下小程序:

#import <Foundation/Foundation.h>

typedef void(^MyTestBlock)(void);

@interface Foo:NSObject
- (id)initWithBlock:(MyTestBlock)aBlock;
- (void)someMethod;
@end

@implementation Foo {
    MyTestBlock _block;
}

- (id)initWithBlock:(MyTestBlock)aBlock {
    self = [super init];
    if( !self ) { return nil; }
    _block = aBlock;
    return self;
}

- (void)someMethod {
    _block();
}

@end

int main(int argc, char *argv[]) {
    @autoreleasepool {
        __block NSObject *myObject;

        Foo *myFoo = [[Foo alloc] initWithBlock:^{
            myObject = [[NSObject alloc] init];
        }];
        [myFoo someMethod];

        NSLog((myObject)?@"Your object was created":@"Why is my object nil?");
    }
}

您忘了在
myMethod
中调用块。试试下面的代码

typedef void(^MyBlock)();

- (void)myMethod:(MyBlock)aBlock
{
    aBlock();
}

希望这个答案有帮助-很抱歉,我们的一些代码有点类似。但我真的没有抄你的。直到我几乎写完我的答案,我才看到你的答案。这里我的网络速度很慢,你说的没错!请看一下我所做的编辑。回答我的问题
typedef void(^MyBlock)();

- (void)myMethod:(MyBlock)aBlock
{
    aBlock();
}