没有 return 值的块

Blocks with no return value

有没有正确的方法在Objective-C中写入没有return值的块?我见过的所有例子都是 return 值。有人还可以解释一下完成块和常规块之间的区别吗?我知道 ^ 表示它是一个块,但 (void) 之前的 + 不也表示它是一个块吗?

如果方法头具有块参数,则方法头如下所示:

- (void)someMethodThatTakesABlock:(returnType (^)(parameterTypes))blockName;

所以没有 return 类型和参数的块看起来像这样:

- (void)someMethodThatTakesABlock:(void (^)(void))blockName;

常规块只是一组(或一组)代码。完成块是将在方法完成时执行的块。完成块是一个常规块,它只是特定于在方法结束时被调用。

^表示一个块。方法前的 + 是 class 方法。

其他使用积木的方法

作为局部变量

returnType (^blockName)(parameterTypes) = ^returnType(parameters) {...};

作为 属性

@property (nonatomic, copy) returnType (^blockName)(parameterTypes);

作为方法参数

- (void)someMethodThatTakesABlock:(returnType (^)(parameterTypes))blockName;

作为方法调用的参数

[someObject someMethodThatTakesABlock:^returnType (parameters) {...}];

作为类型定义

typedef returnType (^TypeName)(parameterTypes);
TypeName blockName = ^returnType(parameters) {...};

您只需将 returnType 替换为 void

这是一个演示:
1、无return值且无参数:

- (void)viewDidLoad {
[super viewDidLoad];

//block
void(^myBlock)(void)  = ^(void) {
    NSLog(@"This is a block without parameter and returned value");
};
myBlock();

2、无return值且有参数:

-(void)blockWithParameterButNoReturnData
{
    void(^myBlock)(int) = ^(int num) {
        NSLog(@"%d",num*100);
    };
    myBlock(4);
}

3、有返回值,有参数: -(void)blockWithParameterAndReturnValue

{
    int (^myBlock)(int) = ^(int num) {
        return num * 100;
    };
   int result =  myBlock(2);
    NSLog(@"This is a block with parameter and return value :%d",result);
}

PS:有关更多信息,请参阅此网站:http://www.cnblogs.com/zhanggui/p/4656440.html