问题标签 [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 回答
3922 浏览

objective-c - Objective-C 块是自动发布的吗?

如果我声明这样的块^{ DoSomething; }并将其放入实例变量中,是否需要Block_copy()保留它?

0 投票
1 回答
1635 浏览

objective-c - Objective-C 块 - 用作对象

参考下面的代码,一旦将一个块放入数组中,您如何获取该块对象并运行该块中的实际代码。

另一个问题:如果我在下面的块中调用一个方法,该块是封装该方法中的代码还是捕获该方法的签名并以这种方式调用它?

0 投票
3 回答
9142 浏览

objective-c - iPhone:使用 dispatch_after 来模仿 NSTimer

对积木知之甚少。你会如何去模仿一个重复NSTimerwith dispatch_after()?我的问题是,当应用程序移至后台时,我想“暂停”一个计时器,但子类化NSTimer似乎不起作用。

我尝试了一些似乎有效的方法。我无法判断它的性能影响或是否可以大大优化。欢迎任何意见。

0 投票
1 回答
771 浏览

iphone - Objective C 块声明冲突

我遇到了一些关于目标 c 块的非常烦人的问题。假设我们有这样的代码:

在此代码中,我收到错误“初始化'void (^)(enum Class2Enum)'的不兼容块指针类型,预期'Class1Callback'”行

但是当我只是在 main.c 中反向导入时,即

错误改变了它的位置和描述 - 现在它是一致的

并且描述是“初始化'void(^)(BOOL)'的不兼容块指针类型,预期'Class2Callback'”

当方法的声明说块类型是 Class1Callback 时,为什么编译器会期望“Class2Callback”?我不知道它为什么会发生,我应该在哪里寻找以及我应该阅读什么来找到答案。有什么建议么?

0 投票
5 回答
2226 浏览

objective-c - 是否可以在 Objective-C 中创建“块”对象的类别

我想通过为 Objective-C 块创建一个类别来添加功能。

而不是只允许正常的[aBlock copy], [aBlock retain], [aBlock release], [aBlock autorelease]. 我可以做这样的事情:

可能的类别

0 投票
1 回答
880 浏览

objective-c - 嵌套objective-c块时的语法/格式

我正在嵌套块,它看起来 UGGGGLY。有没有办法写这个不那么难看?主要是寻找语法建议,而不是结构性的,但我都会接受。

我的块工厂方法,

从许多与此类似的函数中调用它,

queue 是一个 NSOperationQueue 对象。如果没有所有(丑陋的)强制转换,它将无法编译。亚硝酸胺?

编辑:根据 Dave DeLong 的回答和http://www.cimgf.com/2008/02/16/cocoa-tutorial-nsoperation-and-nsoperationqueue/,我改变了行

成为,

0 投票
1 回答
98 浏览

iphone - 循环 x 枚举

我正在重写我的一个应用程序的一部分,以优化它并使其快速运行。

由于这个应用程序是在块之前创建的,我现在正在重写很多东西来使用块。

我用枚举替换循环。你们知道用枚举转换循环是否真的值得吗?我的意思是:

有了这个:

谢谢

0 投票
4 回答
19696 浏览

iphone - setKeepAliveTimeout 和 BackgroundTasks

我对这个话题很头疼。我正在开发一个需要定期轮询网络服务器以检查新数据的应用程序。根据返回的信息,我希望向用户推送本地通知。

我知道这种方法与 Apple 所描述的方法略有不同,在这种方法中,远程服务器进行工作,基于 APNS 推送远程通知。但是,有很多原因我不能考虑这种方法。其中之一就是用户认证机制。出于安全原因,远程服务器不能考虑用户凭据。我所能做的就是将登录和获取核心移动到客户端(iPhone)。

我注意到 Apple 为应用程序提供了唤醒并保持打开 Socket 连接(即 VoIP 应用程序)的机会。

于是,我开始以这种方式进行调查。在 plist 中添加了所需的信息,我可以在我的 appDelegate 中使用类似的东西“唤醒”我的应用程序:

NSOperation,然后使用以下代码块启动后台任务:

上面的代码似乎工作(有时),但许多其他它使我的应用程序崩溃,并带有以下日志信息:

对于那些问的人,是的。我也尝试过 Async NSURLConnection 方法。不管。即使我使用带有超时处理程序和 didFinishLoading:WithError 的异步方法,它也会崩溃。

我被困住了。任何提示都非常感谢。

0 投票
1 回答
3781 浏览

objective-c - 声明对块 typedef 的前向引用?

在一个头文件中,我有类似的内容:

我需要在另一个头文件中使用相同的确切引用。

当然,我可以将#import一个头文件放入另一个头文件,或者将 typedef 包含在全局预编译头文件中,但是有没有办法转发引用块 typedef?

0 投票
6 回答
284 浏览

c - 有什么理由为什么 c 块总是在 ^ 之后直接有 { 而不是在新行上?

我的编码风格是始终将左大括号放在新行上:

苹果过去一直沿用这种风格,但后来改为与{功能在同一行。当使用块时,Apple 代码总是{^:

是否有任何理由将我的样式与块一起使用会出现问题?例如:

我更喜欢我的风格,但如果它导致块问题,那么我将不得不重新考虑它。

澄清

这个问题是关于C 语言的 Blocks 扩展。这不是关于牙套的一般问题。问题是 Blocks 扩展是否对代码风格有任何影响。