问题标签 [objective-c-blocks]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1009 浏览

iphone - 块和核心运动崩溃

我正在使用 Core Motion 的推送处理程序进行加速度计更新:

此代码崩溃。如果我根本不复制该块,我会在暂停/恢复时间歇性崩溃。如果我删除autorelease它工作正常,但我认为这会产生泄漏。

我还尝试将块分配给 ivar 并在[motionManager stopAccelerometerUpdates]. 崩溃也一样。

怎么会?我一直认为我必须平衡任何copy/retainrelease/ autorelease

另请参阅:在 Objective-C 中复制块(即:将它们复制到实例变量)

0 投票
2 回答
2437 浏览

objective-c - 块内存管理

在这个 Apple 参考中,objective-c 中有一个 Blocks 对象的概念概述:

http://developer.apple.com/library/ios/documentation/Cocoa/Conceptual/Blocks/Blocks.pdf

但是,它并没有真正解释两个与我有关且可能与其他人有关的主题。第一个问题是这样的:我可以将 nil 分配给 Block 引用吗?或者我应该使用NULL?或者我不能使用它们?

第二个问题在于内存管理领域。比如说,我已经声明了这样一个在堆栈上创建块对象的方法。

这个对象是在某个范围内创建的,在它离开后将被销毁。但是 TheClass 对象实际上将存储对这个(几乎被破坏的)块的引用:

如何为这样的块声明类属性?这两者有什么区别:

?

在 Apple 文档中明确指出,块复制将块移动到堆中。但如果我只是保留它呢?超出makeTheClass方法范围后会被销毁吗?

0 投票
1 回答
1960 浏览

objective-c - 在 iOS 上运行时检查块的可用性

我需要在运行时测试块的可用性,以便我可以处理与 iOS 3 的向后兼容性。有什么提示吗?

编辑:到目前为止我正在做if (!NSClassFromString(@"NSBlockOperation")) {...} 似乎正在工作......

0 投票
3 回答
15148 浏览

iphone - 使用 CoreData 的 Grand Central Dispatch (GCD)

我在我的应用程序中使用 Grand Central Dispatch (GCD) 来完成一些繁重的工作。该应用程序使用 Core-Data 进行数据存储。这是我的场景(以及相关问题):

作为 的结果[self saveManagedObjectContext]fetchResultsController委托方法被自动调用。因此,UI 更新逻辑启动。

现在我的问题是,我需要使用main_queuefor-saveManagedObjectContext吗?我应该在我NSManagedObject的 in上执行所有操作main_queue吗?一些更新的操作NSManagedObject可能需要 2-3 秒。请指教。

0 投票
1 回答
1233 浏览

iphone - Grand Central Dispatch (GCD) 和异步 API

我正在使用 Twitter API 发布推文。有时这可能需要一些时间,所以我想在后台执行“推文发布”操作。为此,我正在使用 GCD,如下所示:

问题是,我没有收到委托回调!我错过了什么?

0 投票
1 回答
9679 浏览

objective-c - iOS 4 - 使用块作为类的成员

我希望有人可以帮助我理解用作类成员时块的语法。我有一些实际上运行良好的代码:

这行得通,但我想了解typedef语句的语法;以及是否真的需要使用 typedef。

我读到的内容typedef是建议在这种情况下使用,因为它使代码更清晰;但是在没有typedef. 我对 typedef 的理解是语法基本上是:

如:

但是我的typedef语句的语法与此不符。所以我的问题是:

  • 我的语句的语法typedef 与其他语句有何不同 typedef/我使用的语法实际上对编译器意味着什么?
  • 是否可以在不使用的情况下将块作为类的成员typedef
0 投票
3 回答
2876 浏览

objective-c - 块和线程

我想知道 c / cocoa 中的块是否在主线程的单独线程上运行。它们对于执行计算量大的代码同时让 UI 保持响应是否有用?

0 投票
9 回答
58467 浏览

objective-c - 使用块在“self”上保留循环

恐怕这个问题很基础,但我认为它与许多陷入困境的 Objective-C 程序员有关。

我听说的是,由于块捕获其中引用的局部变量作为const副本,self因此在块内使用可能会导致保留周期,如果该块被复制。因此,我们应该使用__block强制块直接处理self而不是复制它。

而不仅仅是

我想知道的是:如果这是真的,有没有办法可以避免丑陋(除了使用GC)?

0 投票
1 回答
1557 浏览

objective-c - 我在哪里可以找到关于 Objective-C 块的好的介绍或文档?

我正在尝试在 Objective-C 中使用块。我已经完成了本教程,但我想了解更多关于块的信息。

我应该在哪里寻找有关 Objective-C 块及其用法的更好的文档或教程?

0 投票
1 回答
839 浏览

iphone - 将 BOOL * 传递给 ALAssetsLibrary

嗨,我需要将 BOOL 传递给

枚举块它具有以下签名。

并且文档说:

Stop:: 指向布尔值的指针;将值设置为 YES 以停止枚举。

但是,如果我尝试将值设置为

我收到以下警告,枚举仍在继续。

所以我的问题是如何将布尔值作为指向停止参数的指针传递?

任何帮助将非常感激。