问题标签 [nsinvocation]

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 回答
4446 浏览

ios - 带有块参数的 NSInvocation

我正在尝试将块参数传递给 a NSInvocation,但应用程序崩溃了。调用发出网络请求并调用成功或失败块。我认为问题在于在网络请求完成之前块被释放。我设法让它与一些Block_copy黑客一起工作,并且它没有使用 Instruments 报告任何泄漏。

问题: - 即使静态分析仪或仪器没有报告泄漏,是否可能存在泄漏?- 有没有更好的方法来“保留”块?

更新:我将代码更新到下面。块是NSMallocBlocks,但应用程序仍然崩溃。

块在链中传递如下:

NSInvocationNSProxy(NSInvocation使用forwardInvocation:) → method1methodN

methodN最终根据 HTTP 响应调用成功或失败块。

我需要在每个阶段复制块吗?上面的例子是在谈论第一个NSInvocation. 我是否也需要[invocation retainArguments];在每个适当的步骤?我正在使用ARC。

0 投票
2 回答
355 浏览

ios - 期望参数类型为整数,但获取 id

我正在使用forwardInvocation:objective-c 的功能,我需要知道该方法收到的参数类型。在我的示例中,我传递了它,intgetArgumentTypeAtIndex:告诉我它是一个id。这是一个简单的例子:

我是这样称呼它的:

知道为什么我没有得到id而不是int作为类型吗?

0 投票
1 回答
2559 浏览

ios - 使用 ARC 从 NSInvocation 获取块参数

我正在尝试从 NSProxy 的 forwardInvocation 中的 NSInvocation 获取 block 参数:这是正确的语法吗?它会泄漏内存吗?

还是我应该使用?

像对象这样的其他参数类型呢?

我是否必须做其他事情才能正确释放分配的内存?

提前致谢。

0 投票
1 回答
551 浏览

objective-c - Swallow 无法识别来自 NSInvocation forwardInvocation 调用的选择器异常

我有一个正在转发接收消息的对象。它没有实现将它们转发到使用forwardInvocation. 但是,methodSignatureForSelector由于程序的组织方式,在某些时候不会总是返回有效的方法签名。如何吞下缺少方法签名产生的异常?覆盖doesNotRecognizeSelector不起作用。谢谢。

0 投票
1 回答
1306 浏览

ios - NSOperationQueue 的多个分配使我的应用程序崩溃

我通过使用 NSOperationQueue 从服务器加载 json 结果来更新我的 tableview

添加队列:

加载结果:

这段代码运行良好并加载了我需要的内容,但如果我多次加载结果应用程序崩溃。我认为这是因为同时进行了许多操作。如何防止应用程序崩溃?

日志:

堆栈跟踪:

0 投票
2 回答
376 浏览

ios - 如何强制 NSUndoManager prepareWithInvocationTarget 保留它的参数?

NSUndoManager 方法 prepareWithInvocationTarget不保留参数。Apple docs 中没有指向此的链接,但我已经使用分析器进行了检查,我很确定 - 它没有。这意味着如果您要删除一个对象并准备撤消 - 您应该自己保留它(例如将其分配给某个垃圾数组并删除原始链接)。那些虚假的删除会造成很多不必要的麻烦,尤其是当您需要摆脱旧的撤消操作时。

但是,NSInvocation可以通过调用 retainArguments 方法来保留参数。由于 NSUndoManager 将 NSInvocation 用于 prepareWithInvocationTarget,因此它可能是将 retainArguments 传递给 NSUndoManager 的方式。

问题是 - 怎么做?

0 投票
2 回答
1958 浏览

ios - NSInvocation 和内存问题

所以我来自 Java 世界,我们对内存管理问题一无所知。在大多数情况下,ARC 拯救了我的屁股,但这里有一些让我难过的事情。基本上我正在使用 NSInvocations 来处理一些东西,在我进行以下代码修改之前,我遇到了一些令人讨厌的内存问题。自从我做了这些修改,内存崩溃已经消失了,但我通常很害怕我不理解的代码。我这样做对吗?

之前:各种内存问题:

之后:没有内存问题,但我不确定我做对了:

编辑:

我只是想根据下面的答案添加,我使用了 objc_msgSend,因此:

它解决了所有的内存问题,而且看起来更简单。如果您对此有任何问题,请发表评论。

0 投票
3 回答
22265 浏览

iphone - Dispatch Queue 和 NSOperationQueue 的区别

我对 GCD 和线程非常陌生。我已经阅读了教程并且非常困惑。有人可以用简单的话解释一下吗?请不要建议苹果开发者链接..

提前致谢 !

0 投票
1 回答
396 浏览

objective-c - 将块传递给异步方法

我将一个块传递给稍后执行此块的异步方法。如果我在将块传递给 someMethod:success:failure 之前不复制块,我的应用程序将崩溃:

有没有办法在 forwardInvocation: 中复制块,而不是在将其传递给 someMethod:success:failure: 之前复制它?

流程是someMethod:success:failure: -> forwardInvocation: -> httpGet:success:failure

httpGet:success:failure:根据 HTTP 状态码执行成功或失败块。

完整的源代码可以在这里找到:https ://github.com/priteshshah1983/BlocksWithNSInvocation

你能帮忙吗?

0 投票
1 回答
598 浏览

objective-c - NSTimer 和 NSInvocation,定时器不触发

首先我创建一个NSInvocation,因为我想用定时器调用的方法有几个参数,我在这里设置

文档说在设置参数时从索引 2 开始,因为索引 0 和 1 是目标和选择器。

然后我找出我希望计时器的间隔。在这种情况下,我在文章发表 60 分钟后调用计时器,所以间隔60 - timeSincePubDate以分钟为单位,我乘以 60 得到计时器的间隔(以秒为单位)。

然后我创建具有间隔的计时器并将其添加到运行循环中。我以前从未这样做过,但这似乎很简单;我不确定为什么它从来没有调用它应该调用的方法。