Objective-C 块语法

5

Obj-C块是我最近第一次使用的东西。我试图理解以下块语法:

在头文件中:

@property (nonatomic, copy) void (^completionBlock)(id obj, NSError *err);

在主文件中:
-(void)something{

id rootObject = nil;

// do something so rootObject is hopefully not nil

    if([self completionBlock])
        [self completionBlock](rootObject, nil); // What is this syntax referred to as?
}

我感谢您的帮助!

在我看来,如果使用点语法,发生的事情会更加清晰。if (self.completionBlock) self.completionBlock(rootObject, nil); - zpasternack
2个回答

5

块是对象。

在您的情况下,在方法内部,您正在检查块是否不为nil,然后调用它传递两个必需的参数...

请记住,块的调用方式与c函数相同...

下面我将语句拆分为两部分,以便让您更好地理解:

[self completionBlock]  //The property getter is called to retrieve the block object
   (rootObject, nil);   //The two required arguments are passed to the block object calling it

2

这是一个块属性,可以在运行时设置块。

以下是设置的语法:

由于它是void类型,所以您可以通过以下代码在类内设置方法:

self.completionBlock = ^(id aID, NSError *err){
    //do something here using id aID and NSError err
};

使用以下代码,您可以调用先前设置的方法/块。
if([self completionBlock])//only a check to see if you have set it or not
{
        [self completionBlock](aID, nil);//calling
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接