使用枚举块

时间:2010-04-27 12:43:26

标签: iphone

我遇到enumerationblock的问题,当我尝试从中访问vidoes和音频时 使用iPhone OS 4.0的手机,我从AssetsLibrary类中找到了以下api

调用给定的块作为参数传递与给定资产组类型匹配的每个资产组。

- (void)enumerateGroupsWithTypes:(ALAssetsGroupType)types
                      usingBlock:(ALAssetsLibraryGroupsEnumerationResultsBlock)enumerationBlock
                    failureBlock:(ALAssetsLibraryAccessFailureBlock)failureBlock

ALAssetsLibraryGroupsEnumerationResultsBlock的签名如下:

typedef void (^ALAssetsLibraryGroupsEnumerationResultsBlock)(ALAssetsGroup *group, BOOL *stop);

那我怎么能创建一个ALAssetsLibraryGroupsEnumerationResultsBlock作为上述方法的参数传递..

非常感谢任何帮助。

最诚挚的问候, 穆罕默德·萨迪克......

1 个答案:

答案 0 :(得分:0)

块(闭包)是LLVM Clang中首次引入的C的一个特性,实际上在Mac OS X 10.6中流行,并在4.0上移植到iPhoneOS。因此,您应该能够找到很多关于块的非NDA信息,例如Apple在http://developer.apple.com/mac/library/documentation/cocoa/Conceptual/Blocks/Articles/00_Introduction.html#//apple_ref/doc/uid/TP40007502-CH1-SW1中的介绍。

通常将块声明为匿名函数,如下所示:

 int x = 0;
 [foo … usingBlock:^(ALAssetsGroup* group, BOOL* stop) {
                       NSLog(@"%@", group);
                       ++ x;
                       if (x > 5)
                          *stop = YES;
                   } …];

这里^引入了内联块(匿名函数),其余是该函数的定义。

此函数迭代foo,将枚举的group打印到控制台,直到循环被破坏的第5项。