草庐IT

objective-c - Grand Central Dispatch (GCD) + Key-Value Observing (KVO)

我有一个添加观察者的方法:-(void)method{[currentPlayeraddObserver:selfforKeyPath:@"some"options:somecontext:some];}所有更改都在这些方法中处理:-(void)observeValueForKeyPath:(NSString*)keyPathofObject:(id)objectchange:(NSDictionary*)changecontext:(void*)context如果我将方法修改为:-(void)method{dispatch_async(dispatch_get_global_queu

ios - 核心数据和 GCD : Passing the correct managed object context to custom NSManagedObjects

我收到运行时错误,这似乎是由于我错误地执行了GCD而导致的结合我的自定义NSManagedObjects。嵌套在GCD中调用,我正在使用自定义NSManagedObjects,它(似乎)有自己的托管对象上下文(=self.managedObjectContext)。我正在使用UIManagedDocument提供的托管对象上下文在应用程序委托(delegate)中创建托管对象上下文:self.managedDocument.managedObjectContext.我不明白如何将正确的托管对象上下文传递到我的自定义NSManagedObjects。我需要如何更改我的代码才能使用正确的托

ios - 这个 GCD 实现的 getter setter 线程安全并且比@synchronized 工作得更好吗?对象

@interfaceViewController()@property(nonatomic,strong)NSString*someString;@end@implementationViewController@synthesizesomeString=_someString;-(NSString*)someString{__blockNSString*tmp;dispatch_sync(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0),^{tmp=_someString;});returntmp;}-(void

php - 寻找超过 2 个整数的 GCD(最大公约数)?

我已经有一个函数可以找到2个数字的GCD。functiongetGCDBetween($a,$b){while($b!=0){$m=$a%$b;$a=$b;$b=$m;}return$a;}但是现在,我想扩展这个功能来寻找N点的GCD。有什么建议吗? 最佳答案 有一种更优雅的方式来做到这一点://Recursivefunctiontocomputegcd(euclidianmethod)functiongcd($a,$b){return$b?gcd($b,$a%$b):$a;}//Thenreduceanylistofinteger

ios - 使用 GCD 按顺序发送邮件

每当用户点击图片时,图像应该发送到他的邮件。我希望这在后台发生,所以我使用SKPSMTPMessage。如果用户在发送/上传上一张图片之前单击一张图片,我会收到错误消息。我想我会使用GCD来序列化它,但我无法解决它。-(IBAction)snapStillImage:(id)sender{//codeaftertakingthepictureif([uploadMethodisEqualToString:@"Mail"]){time_tunixTime=(time_t)[[NSDatedate]timeIntervalSince1970];NSString*timestamp=[NSS

iOS GCD 与异步 block 同步

我有一个带有block的异步函数:[selfperformAsyncTaskCompletion:(void(^)()){//DoSomething}];我需要多次调用此函数,但要以同步方式调用。我尝试使用GCD队列:dispatch_queue_tqueue=dispatch_queue_create("com.MyApp.task",NULL);for(inti=0;i但它不起作用,因为dispatch_sync只是在等待block的结束。我怎样才能让它等待其block中的异步函数结束? 最佳答案 如果你想在一系列异步任务完成后

ios - 使用 GCD 和代码重用 : avoiding re-entrant code deadlock

我正在使用GCD为类添加线程安全。我的类的一些公共(public)方法被类中的其他公共(public)方法调用。但是,这会导致重入锁定问题:如果我使用同步GCDblock(在某些情况下)保护适当的公开可见方法,则重用意味着有时我会尝试在当前队列上运行另一个同步块(synchronizedblock),这会导致死锁。什么是最优雅的解决方案?一个明显的方法是拥有适当方法的内部版本,没有任何GCDblock,以及具有GCDblock的方法的外部公共(public)版本包装对内部方法的调用。这对我来说不太合适。 最佳答案 这里有一些想法:看

ios - GCD 异步 block & EXC_BAD_ACCESS

这种崩溃相当罕见,但它发生的次数足以让我确信我做错了。这是在自定义并发队列上使用主线程异步分派(dispatch)和屏障分派(dispatch)执行的API调用(使用屏障是因为我们正在通过对同一队列的非屏障调用修改在别处读取的数据)。目标是异步发出HTTP请求,然后触发dispatch_barrier_async来处理结果数据。当dispatch_barrier_async调用正在复制传递的block中使用的变量时,就会发生崩溃。我想该变量在block中使用之前已被释放,但考虑到我声明它的方式(作为__block变量),我看不出这是怎么发生的(除非问题出在赋值运算符...)。这是堆栈跟

iphone - 返回在 GCD block 中设置的值

我有一个从block中检索的值,我想在下面的方法中返回该值。由于该block似乎是异步的,我该如何实现?-(UIImage*)imageAtIndex:(NSUInteger)index{UIImage*image;[self.albumenumerateAssetsAtIndexes:[NSIndexSetindexSetWithIndex:index]options:0usingBlock:^(ALAsset*result,NSUIntegerindex,BOOL*stop){//setimageinhere}];returnimage;} 最佳答案

iphone - 如何获取GCD队列中的任务列表?

我在GCD中得到如下所示的主队列,并在我的应用程序中添加来自不同类的不同任务。dispatch_queue_tqueue=dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0);现在我想知道有多少任务仍在GCD主队列中。有什么方法可以获取GCD队列中的任务列表吗?谢谢 最佳答案 这确实不是GCD的范例。例如,如果您想跟踪一组特定的操作,您可以创建一个调度组并注册以在完成时收到通知,如本例所示。dispatch_group_ttaskGroup=dispatch_gro