69得票5回答
隐式地保留了“self”块; 明确指出“self”,以表明这是预期的行为。

考虑以下情况:- (void) someMethod { dispatch_async(dispatch_get_main_queue(), ^{ myTimer = [NSTimer scheduledTimerWithTimeInterval: 60 ...

65得票3回答
如何在主队列同步地分派任务而不会出现死锁?

我需要在主队列上同步地分派一个block。我不知道当前是否正在主线程上运行。幼稚的解决方案如下:dispatch_sync(dispatch_get_main_queue(), block); 但是,如果我当前正在主队列上运行的块中,这个调用会创建一个死锁。(同步调度等待该块完成,但该块甚至没...

65得票10回答
UIButton的块等效于addTarget:action:forControlEvents:方法吗?

我搜索了一下互联网和苹果的文档,但找不到答案,所以我猜这种方法不存在。 但是是否有iOS4块等效的API可用于:[button addTarget:self action:@selector(tappy:) forControlEvents:UIControlEventTouchUpInsi...

64得票1回答
哪个是正确的,nil还是NULL,用于表示“没有Objective-C块”?

如果我想将空值传递给 Objective-C 块,我应该使用什么关键字,NULL 还是 nil?我之所以问这个问题,是因为 Objective-C 块是一个 Objective-C 对象(据我所知),但表示为函数指针。 NULL 和 nil 都表示 0x0 指针,但它们在语义上不同。所以我关...

61得票2回答
在dispatch_async函数中使用weak self

我看了很多关于在dispatch_async里使用__weak self的帖子,现在有点困惑。如果我有:self.myQueue = dispatch_queue_create("com.biview.core_data", NULL); dispatch_async(self.myQueu...

61得票6回答
为什么在当前队列上不能使用dispatch_sync?

我遇到了这样一种情况:我有一个委托回调,可以在主线程或其他线程上发生,直到运行时我都不知道(使用StoreKit.framework)。 我还有一些UI代码需要在该回调中更新,在函数执行之前完成,因此我的初始想法是有一个像这样的函数:-(void) someDelegateCallback:...

53得票3回答
主队列上的dispatch_sync vs. dispatch_async

请耐心听我解释一下。我有一个函数,如下所示。 背景信息: "aProject"是一个名为LPProject的Core Data实体,其中包含一个名为'memberFiles'的数组,该数组包含另一个Core Data实体LPFile的实例。每个LPFile代表磁盘上的一个文件,我们想要做的是...

52得票2回答
在数组中存储块

在Objective-C中,我知道块被认为是对象,所以我想知道是否可以将它们存储在数组中。这引出了一个问题,块是否是一级对象,还是仅仅因为在对象之间传递而像对象一样处理?如果它们是一级对象,那么它们不应该可以存储在数组中吗?

50得票4回答
如何取消NSBlockOperation

我有一个长时间运行的循环,我想在后台使用NSOperation运行它。 我想使用一个块:NSBlockOperation *operation = [NSBlockOperation blockOperationWithBlock:^{ while(/* not canceled*/){...

50得票2回答
如何使用typedef定义块?

在 C/Obj-C 中,我们可以这样定义一个 typedef:typedef int MYINT;,这里很清楚明了。 现在,我们为 block 做一个 typedef - typedef void (^MyBlock) (int a); 现在,我们可以使用MyBlock。 问题是,它是否...