NSBlock的访问限定符是复制还是弱或强?

时间:2014-09-24 07:21:24

标签: ios objective-c-blocks

我有视图控制器1让我们说 VC1 ,我正在推动另一个视图控制器,让我们说 VC2

  1. VC1 中,我将类型定义为我的块,如下所示

    #define typedef void(^Myblock)();

  2. VC2 中,我已将块声明为属性,如下所示

    @property(nonatomic, weak) MyBlock myBlock;

  3. 在推送 VC2 之前,我正在分配块文字,如下所示

  4.  -(void)pushVC2
       {
            __weak VC1 *weakSelf = self;
            VC2 *vc2 = [self.storyboard instantiateViewControllerWithIdentifier:@"VC2"];
           [vc2 setMyBlock:^{
               NSLog(@"Block executed");
           }];
        }
    
    1. 如果我从 VC2 调用我的块,我的问题是,块未执行如果我将属性声明为副本,则执行块。任何人都有这方面的解释。

1 个答案:

答案 0 :(得分:1)

希望这会清除你的概念: -

注意:您应该将copy指定为属性属性,因为需要复制块以跟踪其在原始范围之外的捕获状态。在使用自动引用计数时,您不必担心这一点,因为它会自动发生,但属性属性的最佳做法是显示结果行为。有关更多信息,请参阅块编程主题。

来源: - https://developer.apple.com/library/ios/documentation/cocoa/conceptual/ProgrammingWithObjectiveC/WorkingwithBlocks/WorkingwithBlocks.html