2014-08-29 83 views
0

Obj-C块在什么时候成为对象?我猜测它在被赋值给变量,作为参数传递,从函数,块或方法返回或执行时 - 无论哪个先发生,都会被实例化。但我从来没有见过关于这一点的文件。Obj-C块实例化

而作为这个问题的后记,在Swift中它是一样的吗?

+1

当您编写结尾的'}'时,块将变为对象。 – akashivskyy 2014-08-29 18:18:53

回答

2

块不“成为”一个对象。它的一个对象。块文字评估为指向块对象的指针。

Swift中的闭包不是对象。

+0

让我细化我的问题,它是关于何时发生实例化。是的,块字面值计算为指向块对象的指针。那么字面什么时候评估? – 2014-08-30 21:29:05

+0

假设我有一个工厂方法,它返回在方法体中作为文字书写的块。该方法每次执行时是否返回相同的(==)对象? – 2014-08-30 21:33:40

+1

@DavidCasseres:规范不能保证它是否是同一个对象。如果块从周围范围捕获局部变量(即它是一个闭包),那么它可能不可能是同一个对象,因为它捕获的变量的值在该方法的不同运行期间可能具有不同的值。如果块没有捕获本地变量(非闭包),那么可以返回相同的对象,并且当前实现静态分配非闭包块 - 在程序期间有一个对象持续存在 – newacct 2014-08-31 04:21:54