- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
将外部声明的变量引入 block 时...
使用__block
指令通过引用捕获变量...
Variables local to the enclosing lexical scope declared with the __block storage modifier are provided by reference and so are mutable. Any changes are reflected in the enclosing lexical scope, including any other blocks defined within the same enclosing lexical scope.
没有通过值捕获变量...
Local variables declared within the lexical scope of the block, which behave exactly like local variables in a function. Each invocation of the block provides a new copy of that variable. These variables can in turn be used as const or by-reference variables in blocks enclosed within the block.
我听说使用 __block 效率较低,但这怎么可能呢?您不会总是避免昂贵的副本吗?
最佳答案
除非变量类型是一个巨大的结构体或巨大的 C++ 类,否则复制的成本不会很高。
即使您将其声明为 __block
,它最初也存储在堆栈中(就像局部变量一样),但如果复制任何使用它的 block ,它将被移动到堆中,并且这无论如何,移动都会涉及变量的副本。
关于objective-c - 通过 __block 与不通过 __block 捕获 block 中的外部变量的性能差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45706384/
我正在使用这个 findAllMessages() 函数来返回一个 NSString ,其中包含有关每条消息的信息。 一切顺利,直到我走出 block 并且 concatenatedMessage 字
将外部声明的变量引入 block 时... 使用__block指令通过引用捕获变量... Variables local to the enclosing lexical scope declared
现在我正在开发一个横幅,显示 iOS 中的功能它是一个单例,当用户登录时,它会在屏幕的上部显示横幅。 它基本上是一个带有类方法 showWithName 的共享 View ... @interface
我正在尝试搜索提醒列表以检查是否存在提醒。方法中有一个选项可以保存提醒是否存在的值。我正在使用一个 block ,在 block 内,当找到提醒时,新值被分配给 reminderExists 变量,就
我正在尝试将 block 内的结果分配给 block 变量。这是我的代码: __block UIImage *latestImage; ALAssetsLibrary *assetLibrary =
已关闭。此问题需要 debugging details 。目前不接受答案。 编辑问题以包含 desired behavior, a specific problem or error, and the
我应该声明为 (#1) 类名 * __ block 变量名 或 (#2) __block 类名 * 变量名 ? 我看到很多代码使用格式 #2,包括 Apple 的 Blocks Programming
我使用 AFNetworking 库已经有一段时间了,我刚刚遇到了一个问题。我使用了以下代码,它使用 GET 函数从远程 PHP 文件接收数据。 AFHTTPSessionManager *manag
在ARC中,下面这行代码有意义吗?请确认。 __block __weak MyViewController_iPad *blockSelf = self; 这不会抛出任何错误。不知道为什么。 考虑以下
我很困惑为什么我的全局变量在通过一个 block 后不能再次访问它。这是我的代码: __block NSString *latitude; __block NSString *longitude; C
这个问题在这里已经有了答案: Completion handlers and return values (1 个回答) 关闭 9 年前。 我有以下代码: - (Transporter *) get
我必须修复一些使用 LLVM(在 iOS 上)构建得很好的现有代码,以便它也可以使用 llvm-gcc-4.2 构建。除了在几个地方发现的这种模式外,我几乎完成了所有工作: @property (no
我在编译 Objective-C 类时遇到了以下错误: VideoView.h:7: error: __block attribute can be specified on variables on
我有以下代码片段: -(void) doSomething { __block NSMutableArray *objArray = [[NSMutableArray alloc] initW
我可以使用 __block 说明符在堆栈上指定一个变量,然后我可以在一个 block 中修改它。我只是想知道,幕后发生了什么? (如果该 block 在未来的某个时间执行,则堆栈可能会被清除) 最佳答
我想知道如何在方法的上下文中访问 __block 限定的 var 线程安全。 例子: __block NSMutableDictionary *dictionary = [NSMutableDicti
我对 __block 变量的语法有疑问。我知道您可以在范围内的变量上使用 __block ,因此它在 block 内不是只读的。然而在apple docs中的一个位置,我看到了一个替代方案: "Var
Objective-C 中的 __block 关键字究竟是什么意思?我知道它允许您修改 block 内的变量,但我想知道... 它究竟告诉编译器什么? 它还有其他作用吗? 如果仅此而已,那么为什么首先
我想创建以下类方法: +(void) getValue4Key:(NSString*)p_key andSet:(id)p_variable { NSString *baseURLStr
在阅读 NotificationCenter 文档时,我发现了下面的示例代码。我想澄清的是 __block 在这里是什么意思?我知道何时使用 __block 变量可以在块中更改,但 token 不会更
我是一名优秀的程序员,十分优秀!