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,

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。