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

问题描述 投票:-1回答:2

我在以下情况下发送属性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.view设置为nil。我在解决这种情况时遇到了麻烦,特别是当您将块扔进去时,我认为通常我需要一个双指针吗?

我想知道什么是最好的方法,在此我可以使用方法块中的参数从self.viewnil

ios objective-c cocoa-touch objective-c-blocks
2个回答
0
投票

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


0
投票

您的问题是一个语言问题,从语言上讲,您要的是不可能的,即使有可能,它也不起作用。完成处理程序中的代码无法神奇地扩展并消除您对某些内容的引用。

© www.soinside.com 2019 - 2024. All rights reserved.