问题标签 [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.
ios - 带有块参数的 NSInvocation
我正在尝试将块参数传递给 a NSInvocation
,但应用程序崩溃了。调用发出网络请求并调用成功或失败块。我认为问题在于在网络请求完成之前块被释放。我设法让它与一些Block_copy
黑客一起工作,并且它没有使用 Instruments 报告任何泄漏。
问题: - 即使静态分析仪或仪器没有报告泄漏,是否可能存在泄漏?- 有没有更好的方法来“保留”块?
更新:我将代码更新到下面。块是NSMallocBlocks
,但应用程序仍然崩溃。
块在链中传递如下:
NSInvocation
→ NSProxy
(NSInvocation
使用forwardInvocation:
) → method1
→methodN
methodN
最终根据 HTTP 响应调用成功或失败块。
我需要在每个阶段复制块吗?上面的例子是在谈论第一个NSInvocation
. 我是否也需要[invocation retainArguments];
在每个适当的步骤?我正在使用ARC。
ios - 期望参数类型为整数,但获取 id
我正在使用forwardInvocation:
objective-c 的功能,我需要知道该方法收到的参数类型。在我的示例中,我传递了它,int
但getArgumentTypeAtIndex:
告诉我它是一个id
。这是一个简单的例子:
我是这样称呼它的:
知道为什么我没有得到id
而不是int
作为类型吗?
ios - 使用 ARC 从 NSInvocation 获取块参数
我正在尝试从 NSProxy 的 forwardInvocation 中的 NSInvocation 获取 block 参数:这是正确的语法吗?它会泄漏内存吗?
还是我应该使用?
像对象这样的其他参数类型呢?
我是否必须做其他事情才能正确释放分配的内存?
提前致谢。
objective-c - Swallow 无法识别来自 NSInvocation forwardInvocation 调用的选择器异常
我有一个正在转发接收消息的对象。它没有实现将它们转发到使用forwardInvocation
. 但是,methodSignatureForSelector
由于程序的组织方式,在某些时候不会总是返回有效的方法签名。如何吞下缺少方法签名产生的异常?覆盖doesNotRecognizeSelector
不起作用。谢谢。
ios - NSOperationQueue 的多个分配使我的应用程序崩溃
我通过使用 NSOperationQueue 从服务器加载 json 结果来更新我的 tableview
添加队列:
加载结果:
这段代码运行良好并加载了我需要的内容,但如果我多次加载结果应用程序崩溃。我认为这是因为同时进行了许多操作。如何防止应用程序崩溃?
日志:
堆栈跟踪:
ios - 如何强制 NSUndoManager prepareWithInvocationTarget 保留它的参数?
NSUndoManager 方法 prepareWithInvocationTarget不保留参数。Apple docs 中没有指向此的链接,但我已经使用分析器进行了检查,我很确定 - 它没有。这意味着如果您要删除一个对象并准备撤消 - 您应该自己保留它(例如将其分配给某个垃圾数组并删除原始链接)。那些虚假的删除会造成很多不必要的麻烦,尤其是当您需要摆脱旧的撤消操作时。
但是,NSInvocation可以通过调用 retainArguments 方法来保留参数。由于 NSUndoManager 将 NSInvocation 用于 prepareWithInvocationTarget,因此它可能是将 retainArguments 传递给 NSUndoManager 的方式。
问题是 - 怎么做?
ios - NSInvocation 和内存问题
所以我来自 Java 世界,我们对内存管理问题一无所知。在大多数情况下,ARC 拯救了我的屁股,但这里有一些让我难过的事情。基本上我正在使用 NSInvocations 来处理一些东西,在我进行以下代码修改之前,我遇到了一些令人讨厌的内存问题。自从我做了这些修改,内存崩溃已经消失了,但我通常很害怕我不理解的代码。我这样做对吗?
之前:各种内存问题:
之后:没有内存问题,但我不确定我做对了:
编辑:
我只是想根据下面的答案添加,我使用了 objc_msgSend,因此:
它解决了所有的内存问题,而且看起来更简单。如果您对此有任何问题,请发表评论。
iphone - Dispatch Queue 和 NSOperationQueue 的区别
我对 GCD 和线程非常陌生。我已经阅读了教程并且非常困惑。有人可以用简单的话解释一下吗?请不要建议苹果开发者链接..
提前致谢 !
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
你能帮忙吗?
objective-c - NSTimer 和 NSInvocation,定时器不触发
首先我创建一个NSInvocation,因为我想用定时器调用的方法有几个参数,我在这里设置
文档说在设置参数时从索引 2 开始,因为索引 0 和 1 是目标和选择器。
然后我找出我希望计时器的间隔。在这种情况下,我在文章发表 60 分钟后调用计时器,所以间隔60 - timeSincePubDate
以分钟为单位,我乘以 60 得到计时器的间隔(以秒为单位)。
然后我创建具有间隔的计时器并将其添加到运行循环中。我以前从未这样做过,但这似乎很简单;我不确定为什么它从来没有调用它应该调用的方法。