如何将 属性 作为方法参数传递,然后在 Objective-C 的块中将其设置为 nil?
How to pass a property as a method parameter then set it to nil in a block in Objective-C?
我有以下情况,我在 属性 self.view
中发送,它持有一些观点,作为以下方法的参数:
- (void) someMethod:(UIView *)view
{
[UIView animateWithDuration:.25 delay:0 options: UIViewAnimationOptionAllowUserInteraction animations:^
{
//blablabla
}
completion:^(BOOL finished)
{
[view removeFromSuperview];
view = nil;
}];
}
编译器告诉我的地方:
Variable is not assignable (missing __block type specifier)
我确实尝试将块类型说明符添加到参数中,但这不起作用。我想要这样当我将视图设置为 nil
时,它也会将 属性 self.view
设置为 nil
。我很难理解这种情况,尤其是当你把障碍物扔进去的时候,我想通常我需要一个双指针?
我想知道解决此问题的最佳方法是什么,我可以使用方法块中的参数 self.view
到 nil
。
in objective-C, __ 让你的变量在变量的词法作用域和在变量的词法作用域内声明或创建的所有块和块副本之间共享。在这种情况下,我建议您应该创建一个标志并在块中调用另一个函数来对视图执行某些操作。我认为将 UI 组件保留为共享变量是一种糟糕的方法。它有时可能会使您的应用程序崩溃。
你问的是语言问题,你问的语言上是不可能的,即使可以也不行。完成处理程序中的代码无法神奇地伸出手来消除您对某些内容的引用。
要了解原因,想象一下这 是否 可能!没有人可以编写任何代码,我们的应用程序总是莫名其妙地失败或崩溃,因为我们永远无法确定我们对某物的引用是否被其他人神奇地破坏了。
我有以下情况,我在 属性 self.view
中发送,它持有一些观点,作为以下方法的参数:
- (void) someMethod:(UIView *)view
{
[UIView animateWithDuration:.25 delay:0 options: UIViewAnimationOptionAllowUserInteraction animations:^
{
//blablabla
}
completion:^(BOOL finished)
{
[view removeFromSuperview];
view = nil;
}];
}
编译器告诉我的地方:
Variable is not assignable (missing __block type specifier)
我确实尝试将块类型说明符添加到参数中,但这不起作用。我想要这样当我将视图设置为 nil
时,它也会将 属性 self.view
设置为 nil
。我很难理解这种情况,尤其是当你把障碍物扔进去的时候,我想通常我需要一个双指针?
我想知道解决此问题的最佳方法是什么,我可以使用方法块中的参数 self.view
到 nil
。
in objective-C, __ 让你的变量在变量的词法作用域和在变量的词法作用域内声明或创建的所有块和块副本之间共享。在这种情况下,我建议您应该创建一个标志并在块中调用另一个函数来对视图执行某些操作。我认为将 UI 组件保留为共享变量是一种糟糕的方法。它有时可能会使您的应用程序崩溃。
你问的是语言问题,你问的语言上是不可能的,即使可以也不行。完成处理程序中的代码无法神奇地伸出手来消除您对某些内容的引用。
要了解原因,想象一下这 是否 可能!没有人可以编写任何代码,我们的应用程序总是莫名其妙地失败或崩溃,因为我们永远无法确定我们对某物的引用是否被其他人神奇地破坏了。