As a
local variable:
returnType (^blockName)(parameterTypes) = ^returnType(parameters) {...};
As a
Property:
@property (nonatomic, copy) returnType (^blockName)(parameterTypes);
As a
method Parameter:
- (void)someMethodThatTakesABlock:(returnType (^)(parameterTypes))blockName;
As an
argument to a method call:
[someObject someMethodThatTakesABlock:^returnType (parameters) {...}];
As a
typedef:
typedef returnType (^TypeName)(parameterTypes);
TypeName blockName = ^returnType(parameters) {...};
4. Block Memory Management: 4.1 block is actually a objective-c class. Blocks can be called copy, release, Autorelease, or block_copy (); Block_release (), to manage the reference count, the block is based on the stack, so the retain operation does not work, you must copy the block with copy (this is sometimes a trap, but I did not use such a high-level stuff, so, beginners are too worried about this). 4.2 When a block is copied, the variable it refers to will be preserved (retain) if it is saved, and the object (release) will be released when the Block is released. 4.3 A direct reference to self that is called within a block causes self to be persisted (retain), directly referencing the variable of the instance object, and also causes the self to be persisted (retain), and the local variable in the method is also preserved (retain).
How does I Declare A Block in objective-c?