问题标签 [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 投票
3 回答
1825 浏览

iphone - Objective-C 嵌套块的格式化技巧

我并不是要在这里开始一场代码格式化圣战,但我想知道是否有人对如何最好地格式化 Objective-C 中的嵌套块有任何建议。

这是我今天写的一些代码:

我几乎让 Xcode 格式化它,它并不可怕。但我有点害怕六个月后我会偶然发现这个来修复一些错误,并想打自己的脸。

有人对如何使嵌套块尽可能可读有任何指示吗?

0 投票
2 回答
302 浏览

iphone - 如何在代码中构造 IBOutlet 名称以更改它们?

假设我已经在 IB 中设置了几个 UILabel,并在代码中连接到 IBOulet(label1、label2、label3、label4)

我将如何在代码中创建这些变量名称,以便我可以在循环中更改每个变量的文本,其中标签取自 NSArray。

这是伪代码:

如何在上面构建“labelx”?这可以使用 Blocks 来完成吗?

0 投票
4 回答
7042 浏览

objective-c - 这个插入符号 ^ 语法,两边都有 void 是什么意思?

在 iPhone SDK 4.0 中,UIApplication有一个新方法,setKeepAliveTimeout:需要第二个参数 type void(^)(void)

第二个参数的语法到底是什么意思,我将如何声明一个可以传递给它的函数/处理程序?

FWIW 以下不是它正在寻找的...

0 投票
1 回答
257 浏览

iphone - 删除后台块中的托管对象

在 iPhone 上,我尝试在后台删除托管对象:

deleteObjects我使用单独的 managedObjectContext。如果我从用户界面中删除其中一些对象,如果cleanUp线程在后台运行,应用程序就会崩溃。错误是不能完全填充故障。

有人可以帮忙吗?

0 投票
1 回答
436 浏览

c++ - 什么是 (双 (^)(int))foofoo

cdecl 上有一个示例,(double (^)(int))foofoo意味着将 foofoo 转换为返回 double 的块 (int)

将 foofoo 转换为 int 的“块”是什么意思?^在这种情况下,该符号的确切含义是什么。通常是按位异或。

0 投票
2 回答
1827 浏览

objective-c - 没有为纯后台应用程序发布 Objective-C 块

我有一个仅在后台运行的应用程序(通过LSBackgroundOnly在 info.plist 文件中指定)。问题是,我在并行队列上运行的所有块都没有被释放。代码在内存管理的环境中执行 - 不涉及 GC。

(简化的)代码如下所示。Blubber 只是一个包含 NSDate 用于测试的虚拟类。此外,它会覆盖retainreleasedealloc做一些日志记录:

如果我将应用程序更改为普通(即非背景)应用程序,我可以观察到每当通过 UI 进行任何输入时释放的块(即使将焦点更改为另一个窗口就足够了)。由于我的 backgorund 应用程序直接通过 HID USB 驱动程序接收输入,并且它没有窗口或菜单栏,因此不会发生这种情况。

有没有办法手动强制运行循环或任何负责告诉队列释放完成的块?

(所有其他被块保留的对象也没有被释放,造成巨大的内存泄漏。这些泄漏不能被 Leaks 或 ObjectAllocations 工具发现,但使用 top 可以观察到内存消耗猛增。)

0 投票
1 回答
686 浏览

objective-c - Objective-C 块,它接受一个对象并返回一个布尔值

你能帮我写一个符合这个定义的块吗:(BOOL(^)(id))block.

我得到的最接近的是:

但似乎c在想要的消息中传递这个(BOOL(^)(id))block是不行的。

0 投票
2 回答
7744 浏览

uiview - 动画期间的 UIScrollView 触摸事件不使用 animateWithDuration 触发:但使用 UIView beginAnimations 可以正常工作:

我有一个 UIScrollView 子类,我正在使用 UIView 动画以编程方式滚动。

我希望用户能够在动画发生时点击或放大滚动视图的 UIImageView 内容。

这在使用类似于此的配方时效果很好:

现在,从 iOS 4.0 开始,不鼓励使用 UIView beginAnimations:。因此,我尝试使用块和 UIView animateWithDuration 更新我的代码:滚动的工作方式与上述相同。

关键和令人抓狂的区别在于,在动画期间,UIScrollView 和其他视图不再响应事件处理方法:

也没有:

尝试缩放时被调用。

为清楚起见进行编辑:当前没有 UIView 响应触摸事件。这不仅限于 UIScrollView。UIScrollView 的同级 UIToolbar 不响应触摸事件,作为 UIScrollView 同级的子视图的其他按钮也不响应。似乎整个父 UIView在动画进行时被冻结在用户交互之外。同样,在动画完成后,上述所有 UIView 都会再次响应。

这些都在 UIView beginAnimations: 中调用,无论动画状态如何。

我的 animateWithDuration: 代码略有不同 - 但差异并不重要。动画完成后,再次调用上述触摸事件......

这是我的动画代码:

在上述动画块期间触发的唯一事件处理程序是:

所以,问题:我应该 - 忽略 Apple 的不鼓励标签并继续使用 beginAnimation 公式吗?我应该使用 hitTest 重新实现缩放和其他基于触摸的事件吗?是否有一些关于动画块之间实现差异的知识可以帮助我解决这个问题?我有什么明显的遗漏吗?

我是 Apple 的新开发人员,所以我不知道如何认真对待他们气馁的标签。但是如果这个 API 将被弃用然后消失,我宁愿朝着一个持久的方向前进。

非常感谢您的关注。

0 投票
1 回答
1219 浏览

iphone - 在 Objective-C 块中释放对象

当使用带有完成处理程序(如 AVAssetExportSession)异步返回的 Objective-C 对象时,这样的代码是否有任何错误:

Instruments 将 exportSession 报告为泄漏。我自己也有一些使用相同方法的类,它们也被报告为泄漏。

从我读过的所有内容来看,代码似乎应该遵循正确的内存管理规则,但必须有一些东西。我找到了这篇文章的链接,但我认为我不会导致循环保留。

0 投票
2 回答
1007 浏览

objective-c - Objective-C 块是否类似于 JavaScript 中的匿名函数?

我试图理解块的概念。到目前为止,我所读到的似乎在概念上类似于 JavaScript 中的匿名函数。这个对吗?