专注收集记录技术开发学习笔记、技术难点、解决方案
网站信息搜索 >> 请输入关键词:
您当前的位置: 首页 > Iphone

问两个有关问题,求大神解救

发布时间:2010-05-30 00:35:15 文章来源:www.iduyao.cn 采编人员:星星草
问两个问题,求大神解救
问题一:
下面代码中,for循环中循环变量是什么?这是什么用法?为什么不是c语言中的for(;;)形式?
- (void)saveInterfaceState
{
NSURL *currentURL = nil;
NSMutableArray *navigationStack = [NSMutableArray array];
for (UIViewController *vc in rootNavigationController.viewControllers) {
if ([vc isKindOfClass:[DocSetViewController class]]) {
DocSetViewController *docSetViewController = (DocSetViewController *)vc;
NSMutableDictionary *stackItem = [NSMutableDictionary dictionary];
[stackItem setObject:[docSetViewController.docSet.path lastPathComponent] 
  forKey:@"docSetName"];
NSManagedObject *rootNode = docSetViewController.rootNode;
if (rootNode) {
NSManagedObjectID *rootNodeObjectID = rootNode.objectID;
[stackItem setObject:[rootNodeObjectID URIRepresentation] 
  forKey:@"rootNodeID"];
}
[navigationStack addObject:stackItem];
} else if ([vc isKindOfClass:[DetailViewController class]]) {
DetailViewController *detailVC = (DetailViewController *)vc;
currentURL = detailVC.currentURL;
}
}
if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad) {
currentURL = self.detailViewController.currentURL;
}
NSMutableDictionary *interfaceStateInfo = [NSMutableDictionary dictionaryWithObjectsAndKeys:
   navigationStack, @"navigationStack", nil];
if (currentURL) {
[interfaceStateInfo setObject:currentURL forKey:@"currentURL"];
}
NSData *interfaceStateData = [NSKeyedArchiver archivedDataWithRootObject:interfaceStateInfo];
[[NSUserDefaults standardUserDefaults] setObject:interfaceStateData forKey:@"InterfaceState"];
}


问题二:
dispatch_once中的^{}是什么用法?

+ (id)sharedDownloadManager
{
static id sharedDownloadManager = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
sharedDownloadManager = [[self alloc] init];
});
return sharedDownloadManager;
}

------解决方案--------------------
1.
for (UIViewController *vc in rootNavigationController.viewControllers) {}

这是for(.. in ..) 的用法,在一些高级语言中很常见。效率上也要高一些,看起来更简洁,它等同于
for (int i =0 ;i < rootNavigationController.viewControllers.count; i++) {
    UIViewController *vc= rootNavigationController.viewControllers[i];
}


2.

^{}为无参无返回值的block用法(相当于其它高级语言中的匿名函数,如C#)。
block的声明:
typedef void(^myBlock)(void);
myBlock firstBlock= //...
myBlock secondBlock= //....


 
友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。

其他相似内容:

热门推荐: