首页 > 解决方案 > 如何将属性作为方法参数传递,然后在 Objective-C 的块中将其设置为 nil?

问题描述

我有以下情况,我正在发送self.view包含一些视图的属性作为以下方法的参数:

- (void) someMethod:(UIView *)view
{
    [UIView animateWithDuration:.25 delay:0 options: UIViewAnimationOptionAllowUserInteraction animations:^
     {
        //blablabla
     }
    completion:^(BOOL finished)
     {
        [view removeFromSuperview];
        view = nil;
     }];
}

编译器告诉我的地方:

变量不可赋值(缺少 __block 类型说明符)

我确实尝试将块类型说明符添加到参数中,但这不起作用。我想要它,这样当我将 view 设置为 时nil,它也会将属性设置self.viewnil. 我很难解决这种情况,尤其是当你把块扔进去的时候,我想通常我需要一个双指针?

我想知道在方法块中使用参数self.view的最佳方法是什么。nil

标签: iosobjective-ccocoa-touchobjective-c-blocks

解决方案


在 Objective-C 中, __ 使您的变量在变量的词法范围与在变量的词法范围内声明或创建的所有块和块副本之间共享。在这种情况下,我建议您应该创建一个标志并在块中调用另一个函数来对视图执行某些操作。我认为将 UI 组件保留为共享变量是一种不好的方法。它有时可能会使您的应用程序崩溃。


推荐阅读