ios理解 Pro Mutlithreading and Memory Management for iOS and OS X with ARC, Grand Central Dispatch, and Blocks

Capturing automatic variables

Next, you need to learn what the “together with automatic (local) variables” part means.
For Blocks, this can be rephrased as “capturing the value of automatic variables.” The
next example shows how thiscapture is accomplished.             

When automatic variables are captured, the values are read-only in the Block. The
variables can’t be modified.

Blocks are “anonymous
functions together with automatic (local) variables.

isa 

A struct for each class is a class_t struct based on objc_class struct. The class_t struct
is declared at runtime/objc-runtime-new.h in the objc4 runtime library.
struct class_t {
struct class_t *isa;
struct class_t *superclass;
Cache cache;
IMP *vtable;
uintptr_t data_NEVER_USE;
};

一个block的实现是如下:

Next, let’s see the implementation of the anonymous function that uses the Block. The
original Block literal is as follows.
^{printf(fmt, val);}
This is converted to a function.
static void __main_block_func_0(struct __main_block_impl_0 *__cself)
{
const char *fmt = __cself->fmt;
int val = __cself->val;
printf(fmt,

原文地址:https://www.cnblogs.com/studyNT/p/4474790.html