-1

我有一个包含动画块的方法。我正在尝试将类属性作为参数传递给方法,并在块内为其分配 nil 值。

-(void)endPinching:(UIViewController *)pinchedController{

    // a bunch of code

    [UIView animateWithDuration:0.2 animations:^{
        //do stuff

    } completion:^(BOOL finished) {

       // do other stuff

        pinchedController = nil; //HERE IS THE PROBLEM!!
    }];
  }
}

因此,如果我在调用它的类中调用此方法,则 pinchController 是 self.pinchController,因此可以在块内设置为 nil。但是在这里,在定义中,我得到一个编译器错误:

"variable not assignable, missing block type specifier"

因此,我尝试通过执行以下操作添加块说明符:

__block pinchedController = nil;

编译器说:

"unused variable pinchedViewController"

我认为这意味着 pinchedController 现在被认为是一个新变量,并且与方法参数无关。

我的问题是:有没有办法将 pinchedViewController 作为参数传入并将其分配给该块内的 nil ?

4

1 回答 1

0

如果我理解正确,您想显式释放给定的对象。这是不可能的,因为引用计数是如何工作的。

通过传递UIViewControllerto endPinching:,您将对象的引用计数增加一。将指针(堆栈上的局部变量)设置为nil只会将引用计数减少 1,但由于这仍然是您的类的实例变量,因此不会被释放。

所以首先,你应该问自己为什么要释放这样的对象。这可以通过更好地设计代码或尝试找出视图控制器占用大量内存的原因来解决。

如果您仍想解除分配,您可以self.pinchController = nil在您的方法中显式设置或调用某种委托来执行此操作(我需要更具体地查看整个视图控制器设计)。

于 2013-07-15T15:47:25.773 回答