Objective c 在块中初始化后,iOS NSObject nil
我在块内创建了一个NSObject。根据以下代码: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
__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();
}