在集合中存储块

Nic*_*ore 13 cocoa objective-c nsmutablearray objective-c-blocks

是否可以直接将块存储在NSArray等集合中?

Eim*_*tas 23

是的,块是有效的Objective-C对象,遵循NSObject的所有约定.只需复制/自动释放舞蹈:

[array addObject:[[block copy] autorelease]];
Run Code Online (Sandbox Code Playgroud)

对于ARC - 省略复制和自动释放调用:

[array addObject:block];
Run Code Online (Sandbox Code Playgroud)

  • 为什么要复制? (2认同)
  • 如果ARC可以确定在堆栈上分配了块,它将自动执行复制,但是如果它无法判断该块是否已经在堆上,则它将不会执行复制.将块传递给方法时会发生这种情况.编译器无法判断它是在堆栈还是堆上分配的. (2认同)