调用阻止iOS
我尝试调用一些块,但我遇到了EXC_BAD_ACCESS。
-(void) methodA { self.block = ^ { [self methodB]; }; } -(void) webViewDidFinishLoad:(UIWebView *)webView { [block invoke]; // error here (block is not valid id type). } -(void)methodB { //do something }
有关为什么会发生这种情况的任何想法?
在声明块属性时应使用copy属性。 喜欢:
@property (nonatomic, copy) id block;
如果你想调用块你可以简单地做这个block();
而不是[block invoke];
有关更多详细信息,请参阅块编程主题
你必须把块放在堆上:
self.block = Block_copy(^{ [self someMethod]; });
编辑: @ murat的答案也是正确的(也可能更好)。 无论如何,您必须复制块,因为块实际上是在堆栈上创建的,而不是在堆上创建的。
有关要保留的块的更多信息,请参阅文档中的“复制块”和“要避免的模式” 。
你可以像这样在.h文件中声明一个块的属性,它不会给出过多的 –
typedef int (^devideEquallyBlock)(int); @property (nonatomic, copy) devideEquallyBlock callbackBlock;
请确保声明副本不保留,以获取有关如何在ios / objective-c中声明属性块编程的更多详细信息