我遇到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作为上述方法的参数传递..
非常感谢任何帮助。
最诚挚的问候, 穆罕默德·萨迪克......
答案 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项。