是否能将block储存在数组中?能

Blocks are Objective-C objects that very much behave like every other NSObject, with a couple of key differences:

Block 是object-c中的对象,操作block很多情况下就像操作其他nsobject一样,但是有一些重要的不同:

  • Blocks are always generated by the compiler. They are effectively "alloc/init"ed at runtime as execution passes over the blocks declaration.

    Block 通常由编译器生成,他们在程序运行时,执行到block的声明的时时候,被“alloc/init”

  • Blocks are initially created on the stack. Block_copy() or the copy method must be used to move the Block to the heap if the Block is to outlive the current scope (see ARC point below).

    Block 最初在栈里面被创建,当Block的生命周期比作用域要长的时候,需要将block挪到堆里面去,这时候就必须要使用Block_copy()这个copy方法

  • Blocks don't really have a callable API beyond memory management.

    Block在内存管理之外并没有可以调用的API  //这句话不知道神马意思

  • To put a Block into a Collection, it must first be copied. Always. Including under ARC. If you don't, there is risk that the stack allocated Block will be autoreleased and your app will later crash.

    要将Block放到一个收集容器里面,她首先必须要被copy。通常来说,这要在arc环境下面进行。如果你不这样搞,就会有一个风险:由stack allocate 的block将会被自动释放,然后你的app就妥妥的挂掉了

  • Copying a stack based block will copy all of the captured state, too. If you are making multiple copies of a block, it is more efficient to copy it once, then copy the copy (because copying the copy just bumps the retain count since Blocks are immutable).

    copy一个在stack里面分配的block同时也将会copy她的所有状态(执行到哪一条语句,等等状态)。如果你想搞一推block的copy,更有效地方法是:先搞一个copy出来(copyBlock),然后再去copy搞出来的那个copyBlock(因为copy那个copyBlock仅仅是将retain count清零,因为block是不可变的)//不是很懂

  • Under ARC, returning a Block from a method or function "just works"; it'll be automatically copied to the heap and the return will effectively be an autoreleased Block (the compiler may optimize away the autorelease in certain circumstances). Even with ARC, you still need to copy the block before sticking it into a collection.

    在arc环境下,从一个函数或者方法中返回一个block是“妥妥的行”的;她会被自动copy到堆里面,返回的block会被自动回收(编译器会使这个自动回收尽可能最优)。即使用上了arc,将block 放到容器之前仍然需要copy你的block,将copy放到容器里面

I've written a couple of blog posts both providing an introduction to blocks and some tips and tricks. You might find them interesting.

我搞了几篇屌炸天的blog,是关于 block的介绍 还有 一些技巧跟提示 。你可能会觉得它们很逗。

And, yes, adding 'em to dictionaries is quite useful. I've written a couple of bits of code where I dropped blocks into dictionaries as command handlers where the key was the command name. Very handy.


http://stackoverflow.com/questions/7997666/storing-blocks-in-an-array


---------------------------------------------------------------分割线 2013.9.10-------------------------------------------------------------------------------------

Under ARC, a block does not have to be copied anymore when being added to a collection! Apple said that in their "ARC Transition Guide", but that guide is rather dated. Please check outblog.parse.com/2013/02/05/objective-c-blocks-quiz - especially the answers to example B and example C, as well as the "Conclusion" at the end. The need for copying blocks even under ARC arose from a compiler bug in clang (which has been fixed long ago) and was just a work-around since Apple couldn't wait for this bug to be fixed first before releasing the next Xcode version.


在arc里面,将一个block放到容器之前已经不需要copy它鸟!!!Apple在”ARC Transition Guide“里面是这么扯的!但是那个Guide过期了?!你可以在这里搞到:blog.parse.com/2013/02/05/objective-c-blocks-quiz。特别是例子B跟例子C的答案,还有最后的结论。即使是在ARC里面,需要copy一下block才能放到容器里面这个鸡巴操作会引起编译器的错误。。。。。。后面省略

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: LabVIEW是一款功能强大的图形化编程软件,可以用于实时存储数据到数组中。 首先,我们需要在LabVIEW中创建一个数组变量。可以通过右键点击前面板中的空白区域,选择创建->全局变量来创建一个全局的数组变量。在出现的对话框中,选择创建一个数组并指定其名称和数据类型。 接下来,我们需要将实时产生的数据存储到这个数组中。可以使用LabVIEW的数据获取和保存功能来实现。选择适当的数据源,例如传感器或其他仪器,将其连接到LabVIEW中的数据采集节点。然后,将数据采集节点的数据输出连接到数组变量的输入端。 为了实时存储数据,我们需要在实时循环中运行LabVIEW程序。在框图中创建一个While Loop结构,并将数据获取和保存的逻辑放置在循环中。在循环的每次迭代中,LabVIEW将获取最新的数据并存储到数组中。 最后,我们可以选择将存储的数据以合适的格式保存到文件中,或者在界面上显示存储的数据。可以使用LabVIEW提供的文件操作和图形显示功能来完成这些任务。通过将保存或显示数据的逻辑放置在循环之外,可以保证存储的数据是实时更新的。 总之,LabVIEW提供了丰富的功能和工具,可以方便地实现实时存储数据到数组中。使用LabVIEW的数据获取和保存功能,可连接数据源和数组变量来存储实时数据。通过循环结构和文件操作/图形显示功能,可以实现数据的持续存储和展示。 ### 回答2: 要使用LabVIEW实时存储数据到数组,可以按照以下步骤进行操作: 1. 打开LabVIEW软件并创建一个新的VI。 2. 在前面板上选择一个数组控件,用于存储数据。可以在"Controls"面板上找到并拖动一个"Array"控件到前面板上。 3. 在Block Diagram上,右键单击空白处并选择"Array"选项,然后选择"Build Array"函数。将其拖动到Block Diagram中。 4. 将数据源(如传感器或仪器)连接到"Build Array"函数的输入端口上。您可以使用不同的数据获取方法(如DAQ或串口通信)来获取数据。 5. 在其余Block Diagram上添加必要的处理步骤(如数据滤波或计算)。 6. 将"Build Array"函数的输出连接到数组控件(前面板上创建的)的输入端口上。 7. 运行VI以开始存储数据到数组。您可以单击前面板上的运行按钮或按Ctrl+R来启动。 8. 存储的数据将实时地显示在数组控件上。您可以在运行时监视数据的变化。 需要注意的是,LabVIEW是一个强大的数据获取和处理工具,您可以根据实际需求对VI进行定制和优化。此外,存储数据到数组只是其中一种方法,LabVIEW还可以实现数据存储到文件或数据库等其他形式的数据存储方式。 ### 回答3: LabVIEW是一种强大的图形化编程环境,可用于实时存储数据到数组。在LabVIEW中,我们可以使用数组变量来存储和处理数据。 要实时存储数据到数组,首先需要创建一个数组变量。在LabVIEW中,可以使用“Array”数据类型创建一个数组。可以通过右键点击Front Panel区域然后选择“Create”>“Array”来创建一个数组变量。 接下来,我们需要将实时获取的数据存储到数组中。我们可以使用LabVIEW提供的数据获取设备,如传感器、仪器等。通过连接数据获取设备并配置其参数,可以实时读取数据。将读取到的数据通过数据连接线连到数组变量的输入端口,可以将数据存储到数组中。 如果要实时存储多个数据点,可以使用循环结构,如While循环,在每次循环迭代中将数据点存储到数组中。将每次读取的数据点与当前数组进行连接,可以不断扩展数组的长度,并保持数组中的数据实时更新。 要访问存储在数组中的数据,可以使用索引方式。可以通过数组的索引控制输入来选择存储在数组中的特定数据点。通过连接索引控制输入和数组输出,可以将指定的数据点输出到其他部分进行进一步处理。 最后,为了方便数据的显示和保存,可以将数组数据可视化为图表或图形等形式。LabVIEW提供了多种绘图和图形化工具,可以将数组数据以不同的方式展示出来。 通过上述步骤,我们可以实现实时存储数据到数组,并进行后续的数据处理和分析。LabVIEW的图形化编程环境使得数据存储和处理变得简单易用,适用于各种实时数据采集和控制系统。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值