草庐IT

dispatch_block_t

全部标签

iphone - Objective-C : __block variables

是否可以为局部变量分配一个范围在block外的值并保留其值?特别是,我正在为iOS编码,我在另一个block内有一个嵌套block,我想在block内为NSString分配一个值,然后(在block外)使用它。当我在block之后引用NSString时,我尝试使用__blocknut我得到一个错误的访问错误。我正在使用ARC,这很重要。例如:__blockNSString*str;someBlock^(idparam1){str=@"iPhone";}[strgetCharAtIndex:1];//orw/e我是不是在做一些概念上的错误,或者这是不允许的,或者是什么?非常感谢您的帮助。

iphone - 给定一个异步 block ,如何知道该 block 何时完成?

假设您正在使用来自ALAssetsLibraryAPI的异步block,例如enumerateGroupsWithTypes:ALAssetsGroupAllusingBlock:^(ALAssetsGroup*group,BOOL*stop)。首先,由于block是异步的,这是否意味着系统将自动在单独的执行线程上运行block?如果是这样,了解block何时完成的最佳方法是什么,以便我可以执行一些操作,例如停止UIActivityIndi​​cator旋转或重新加载UITableView。IE喜欢animateWithDurationblock,它有一个完成block,允许您在动画完

objective-c - 对多个位置进行地理编码 - 了解何时调用 "All"完成 block

我正在使用CoreLocation的地理编码器来获取多个map项的CLLocation坐标。地理编码器在每个项目完成时调用一个完成block。我如何创建一个类似的block功能,当所有这些包含异步地理编码器调用的调用已完成时调用?(我可以使用手动计数器。但必须有更优雅的解决方案)到目前为止,这是我的地理编码功能。它循环遍历一系列位置项,并为每个项启动一个新的地理编码过程。-(void)geoCodeAllItems{for(EventItem*thisEventin[[EventItemStoresharedStore]allItems]){if(![thisEventeventLoc

ios - 在 dispatch_async 中使 NSTimer 无效

我正在创建一个游戏,在游戏中我需要一个计时器。我工作得很好,但是当我滚动map时它会停止,然后当我完成滚动时它会再次开始。我用dispatch_async解决了这个问题。这是代码dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0),^{timer=[NSTimerscheduledTimerWithTimeInterval:1target:selfselector:@selector(timeNext)userInfo:nilrepeats:NO];[[NSRunLoopcurrentRu

ios - 如何释放通过 dispatch_once 创建的实例对象

我的项目使用ARC我有1个这样的类:@implementationMyObject+(instancetype)shareInstance{staticid_shareInstance=nil;staticdispatch_once_toncePredicate;dispatch_once(&oncePredicate,^{_shareInstance=[[selfalloc]init];[[NSNotificationCenterdefaultCenter]addObserver:selfselector:@selector(freeInstance)name:kLC_Notific

ios - 如果我想让任务在后台运行, "dispatch_get_global_queue"队列如何工作?

在选择要在哪个队列上运行dispatch_async时,经常会提到dispatch_get_global_queue。这是一个将任务委托(delegate)给特定线程的特殊后台队列吗?是不是差不多是单例了?因此,如果我总是为我的dispatch_async调用使用该队列,该队列是否会变满并且必须等待事情完成才能开始另一个任务,或者它是否可以将其他任务分配给不同的线程?我想我有点困惑,因为当我为NSOperation选择队列时,我可以使用[NSOperationQueuemainQueue]选择主线程的队列>,这似乎是dispatch_get_main_queue的同义词,但我的印象是N

ios - 我如何确保代码不会被多次调用,但又不会像 dispatch_once 那样在整个程序执行过程中阻塞它?

假设有一些事情我想确保它在执行时永远不会被调用。以UIScrollView为例,每次发生任何缩放时都会调用scrollViewDidScroll:方法。如果我想在第一次调用时使用[UIViewanimateWithDuration...],但不允许后续调用“覆盖”已经播放的动画怎么办?dispatch_once会完美地工作,如果不是因为它只允许它在每次程序执行时运行一次,当我需要它运行多次时,只是不同时互相覆盖。我将如何阻止后续调用将事情搞砸? 最佳答案 如果我理解那么这样的事情应该可以工作(因为委托(delegate)总是从主线程

ios - 在具有快速枚举的 for 循环中使用 block 的错误

所以我试图在一个数组中建立一个block队列,然后在稍后阶段执行队列,该队列是在使用block中使用的字符串枚举的forloop中建立的。NSArray*array=@[@"test",@"if",@"this",@"works"];NSMutableArray*queue=[NSMutableArraynew];for(idkeyinarray){//addtheworktothequeuevoid(^request)()=^{NSLog(@"%@",key);};[queueaddObject:request];//request();//thisworksfineifijuste

ios - 重置 dispatch_once 是否安全(不涉及线程)

我想知道重置dispatch_once是否安全(不涉及线程):我的情况是,我在整个应用程序中都缓存了NSDateFormatters和NSNumberFormatters等。为此,我将它们包装在dispatch_once调用中。现在,当我收到区域设置更改的NSNotification时,我想重置其中一些dispatch_once标记,因此下次需要格式化程序时,它们会再次分配。我会简单地让每个vc观察通知并将token的值重置为0。这样可以吗?感觉..一方面有点脏,但也可以,因为替代方法是使用BOOLS并用if..替换调度调用。#import"ViewController.h"stati

iOS: block 和ivars

这个问题在这里已经有了答案:ClarificationonApple'sBlockDocs?(2个答案)关闭8年前。在很多问题中,询问是否可以在block中使用self。答案是否定的,以避免保留循环。现在,当我在我的UIViewControllerblock中使用“ivar”时,它应该没问题。但是当我使用:-(void)viewDidLoad{[_customCellsetChangedValueBlock:^{if(_object!=nil){NSLog(@"Thisisasample");}}];}dealloc方法从未被调用:-(void)dealloc{NSLog(@"Deal