- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我编写了一个应用程序,它具有许多自定义 View ,并且通常绘制大量线条和位图。由于性能对于应用程序来说至关重要,因此我花了很多时间来优化绘制性能。
现在,事件监视器告诉我,我的应用程序通常使用大约 12% 的 CPU,而 Instrument(分析器)表示 objc_msgSend 花费了高达 10% 的 CPU(主要用于绘制相关的系统调用) )。
一方面,我对此感到很高兴,因为这意味着我的绘图速度已经达到了最快,并且我的优化取得了巨大的成功。另一方面,这似乎意味着唯一仍在使用我的 CPU 的是 Objective-C 消息开销 (objc_msgSend
)。因此,如果我用 Carbon 编写应用程序,它的性能会大大提高。
现在我很想得出这样的结论:Objective-C 是一种性能很差的语言,尽管 Cocoa 似乎非常高效,因为它的绘制速度明显比 Objective-C 发送消息的速度快。
那么,Objective-C真的是一种性能很差的语言吗?您对此有何看法?
最佳答案
不,Objective-C 的性能并没有那么糟糕。作为证据,我引用了 @bbum 关于 objc_msgSend 手工优化组装的系列文章:
换句话说,objc_msgSend
速度很快;方法调度不是你的问题。您能否发布让您相信其他情况的个人资料信息?您可能误读了分析,或者您在幕后做了一些非常奇怪的事情,等等。
但我向您保证 objc_msgSend
不是问题所在。如果是的话,我们现在肯定已经听说过它了。 :)
关于objective-c - 我的程序大部分时间都花在 objc_msgSend 上。这是否意味着 Objective-C 的性能很差?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2811820/
我需要理清思路才能理解 objc_msgSend()。请慷慨地提供详细答案。 :) 这是我对 Apple Doc 的理解。 When a message is sent to an object, t
假设我在运行时得到一个对象和它的选择器之一,我打算安全地调用它,所以我定义了 #define objc_msgsend_va ((void (*)(id, SEL, ...))objc_msgsend
当我尝试在模拟器(3.1.3,Xcode 3.1.4)上启动我的应用程序时,它显示 objc_msgSend 并且应用程序没有启动。只有当我 alloc NSMUtable Array 时才会发生这种
我在我的应用程序中收到了“objc_msgSend()” fatal error 消息,这要感谢 Hamster Emporium我可以弄清楚发生了什么。 现在我找到了“问题”和“解决方案”,但我不明
我的 iOS 应用程序有一些来自 bugsense 的崩溃报告,但我无法重现,因此无法调试。它一天发生 200 多次,所以我想这很严重。 我读过一些关于 NSZombie 的内容,但我无法重现崩溃,所
当我在应用程序中随机单击按钮时,它会变成这样,没有任何错误或任何异常请给我建议以及如何克服此类错误 提前致谢 最佳答案 为代码中的所有异常设置断点,我们无法使用该信息做任何事情。 如果这没有帮助,只需
在我的项目中,我在右上角添加了一个关闭按钮,如下所示: int closeBtnOffset = 10; UIImage* closeBtnImg = [UIImage imageNamed:@"po
我正在使用 dtrace 打印代码中的所有 objc_msgSend。到目前为止,我可以看到选择器的名称,但无法获得正确的类名。 这是我的 dtrace 脚本: #!/usr/sbin/dtrace
我正在编写一个 objc 桥,我发现了一种使用 objc_msgSend 调用 objc 方法的非常有效的方法。 基本上,代码能够生成一个宏,该宏传递给 objc_msgSend 从 NSArray
我一直在分析我的回合制游戏应用程序,我遇到了一个有趣的(也许)问题。根据下图,objc_msgSend 似乎占用了我的应用程序将近一分钟的运行时间。这是什么,它是否是某些代码编写不当的标志?谢谢! 最
当我有返回一些联合的方法时,我有一个与 objc_msgSend 运行时调用相关的问题。 我正在通过 libffi 调用 objc_msgSend 函数,如果我有小于 16B 的联合,一切都很好,但如
我正在测试我的应用程序,非常努力地插入它,但我让它崩溃了(黑屏,图像无法保存,返回到 springboard)。但是,我没有在控制台中记录任何崩溃报告。当我使用探查器进行测试时,我得到的只是一条消息,
我已经为 iphone 启动了一个基于 2d 图 block 的游戏,我将直接跳转到我的类(class)和问题。我现在总共有 2 个类 Tile 、 Table 和 Base 主类瓦 `@interf
我正在尝试使用 objc_msgSend动态调用某个方法的方法。 假设我想从 A 类调用 B 类中的某个方法,而 B 类中有两个方法,例如: - (void) instanceTestWithStr1
我很惊讶在 stackoverflow 上搜索 j__objc_msgSend 返回 0 个结果,Google 似乎也不太了解它。根据它的 disassembly , j__objc_msgSend
我正在尝试追踪一个错误,我有一个看起来像这样的崩溃日志: 0 libobjc.A.dylib objc_msgSend + 15 1 CoreFoundation __CFRUN
我在 Crashlytics 中遇到如下所示的崩溃。 我无法理解这是应用程序中的什么形式。不幸的是,我自己从未能够生成此崩溃,但它正在发生。 只有一个对应用名称的引用,没有任何内容可以表明它来自应用中
我正在尝试确定 Apple 在 NSWorkspace 上公开的方法在内部如何工作,以便尝试解决该方法的不幸副作用(它写入磁盘,每次调用它)。我可以将 lldb 附加到我的可执行文件并在调用该方法时设
我最近遇到了一个问题,在 Google 上没有可用的解决方案。我想将应用程序的 Objective-C 消息记录到控制台或文件中。我没有编写应用程序,所以我没有源代码来重新编译并包含日志记录。我有一个
当 NSAutoreleasePool 耗尽时,我发生了崩溃。据推测,该池正试图释放一个已被另一段代码过早释放的对象。我遇到的崩溃发生在 objc_msgSend 中,因为它正在尝试向不再存在的对象发
我是一名优秀的程序员,十分优秀!