ios - 如何将属性作为方法参数传递,然后在 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.view
为nil
. 我很难解决这种情况,尤其是当你把块扔进去的时候,我想通常我需要一个双指针?
我想知道在方法块中使用参数self.view
的最佳方法是什么。nil
解决方案
在 Objective-C 中, __ 使您的变量在变量的词法范围与在变量的词法范围内声明或创建的所有块和块副本之间共享。在这种情况下,我建议您应该创建一个标志并在块中调用另一个函数来对视图执行某些操作。我认为将 UI 组件保留为共享变量是一种不好的方法。它有时可能会使您的应用程序崩溃。
推荐阅读
- sql-server - SSIS 包未从服务器运行
- sonarqube - 有没有办法在 sonarqube 阶段扫描多个项目?
- node.js - 为 Hyperledger Fabric Web 应用程序分配对等上下文
- python - 使用来自多个列的字符串和整数应用函数不起作用
- java - Android:将文本设置为复选框不起作用
- python - 如何在 PyCharm 的运行配置中重新启动链接的 Docker Compose 服务?
- java - String[][] name 和 String name[][] 的区别
- java - 消费者从 Apache ActiveMQ Artemis 中的接收方法接收单个消息
- microservices - 在微服务中的并行网络调用与事件驱动的数据同步之间做出决定
- php - 在 php 中使用 ES256 算法在 JWT 中未在 Ios 设备检查 api 中获得响应