//ローカル変数として宣言します:
returnType(^ blockName)(parameterType1、parameterType2、...)= ^ returnType(argument1、argument2、...){...};
//プロパティとして宣言します:
@property(非構造、コピー、NULL可能性)returnType(^ blockName)(parameterTypes);
//メソッドのパラメータとして宣言します:
- (void)someMethodThatTakesABlock:(returnType(^ nullability)(parameterTypes))blockName;
//メソッド呼び出しの引数として宣言する:
[someObject someMethodThatTakesABlock:^ returnType(parameters){...}];
// typedefとして宣言します:
typedef returnType(^タイプ名)(parameterTypes);
タイプ名blockName = ^ returnType(parameters){...};
// C関数を宣言してブロックオブジェクトを返す:
BLOCK_RETURN_TYPE(^ function_name(関数パラメータ))(BLOCK_PARAMETER_TYPE);