我有 View Controller 1 比方说 VC1,我正在插入我的另一个 View Controller 比方说 VC2。
在 VC1 中,我的 block 类型定义如下
#define typedef void(^Myblock)();
在 VC2 中,我声明了一个 block 作为属性,如下所示
@property(nonatomic, weak) MyBlock myBlock;
在推送 VC2 之前,我分配了一个 block 文字如下
-(void)pushVC2 { __weak VC1 *weakSelf = self; VC2 *vc2 = [self.storyboard instantiateViewControllerWithIdentifier:@"VC2"]; [vc2 setMyBlock:^{ NSLog(@"Block executed"); }]; }
- 我的问题是,如果我从 VC2 调用我的 block , block 不会执行。 如果我将该属性声明为副本,则执行 block 。任何人对此都有解释。
最佳答案
希望这会清除你的概念:-
注意:您应该将 copy 指定为 property 属性,因为需要复制 block 以跟踪其在原始范围之外捕获的状态。当使用自动引用计数时,这不是你需要担心的事情,因为它会自动发生,但最好的做法是让 property 属性显示结果行为。有关详细信息,请参阅 block 编程主题。
关于ios - NSBlock 的访问限定符是复制还是弱还是强?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26010899/