Objective-C 优化

2023-11-26

Objective-C 是否有标准的优化技巧,可以沿着 C++ 或“g++ -fast”标签中的“内联”频繁方法加快执行速度?

编辑:当 theMethod 有两个(或更多)整数用于输入时,是否有人有一个使用 SEL 和 IMP 的简短示例?


这是一个小的优化,可能并不值得花时间去实现,而且我个人从未使用过,但我想了解一下还是很不错的。您可以通过直接使用方法实现来绕过重复的方法分派,而不是一遍又一遍地向同一对象重复发送相同的消息。例如,代替:

for (int i = 0; i < 100000000; i++)
    [someObject messageWithInt:i];

你可以尝试:

SEL theSelector = @selector(messageWithInt:);
IMP theMethod = [someObject methodForSelector:theSelector];

for (int i = 0; i < 100000000; i++)
    theMethod (someObject, theSelector, i);

这意味着方法查找只完成一次,您可以通过返回的值直接调用该方法IMP价值。所有 Objective-C 方法实现都至少有两个参数,第一个参数是类型的接收对象id,这变成self在方法实现中,第二个参数是选择器 [of typeSEL] 用于确定方法实现,并变为_cmd在方法实现中。

如果您不使用正确的“函数定义”(我不记得正确的术语),这种方法很快就会变质。IMP is a typedef对于返回的函数void*并采取(id,SEL,...)作为参数。如果该方法实际上返回类似的其他内容,那么使用起来会很麻烦float。为了帮助解决这个问题,您可以转换以下返回值-methodForSelector:, 像这样:

typedef float (*MyMethodIMP)(id,SEL,int);

SEL theSel = @selector(messageWithInt:);
MyMethodIMP theMethod = (MyMethodIMP)[someObject methodForSelector:theSel];
float result = 0.0;

for (int i = 0; i < 100000000; i++)
    result += theMethod (someObject, theSel, i);

只要小心一点,您就可以保存theMethod您也许可以将它用于特定类的所有实例,而不仅仅是一个实例,但请小心行事。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Objective-C 优化 的相关文章

随机推荐

  • JSON 解析 - 名称中的单引号

    在 Django 模板中 我打印出了如下数据 P place place json safe 然后在 JavaScript 文件中我像这样进行配对 place JSON parse P place 对于这样的数据来说一切都很好 catego
  • 在控制器中使用 HtmlHelper

    是否可以在控制器中使用 HtmlHelper 例如获取 TextBox 方法 并不是说我不能编写它自己生成的 html 而是我只是想了解它是如何工作的 以便我可以创建最佳解决方案 这是改编自的示例this var h new HtmlHel
  • 通过 Web API 在 Dynamics 中查找选项列表值

    我正在尝试确定如何通过 Web API 找到 Dynamics 中选项列表字段的整数值 我可以使用以下方式访问基本元数据 GET https COMPANY api crm3 dynamics com api data v9 0 Entit
  • 如何将 UIImage 数组导出为电影?

    我有一个严重的问题 我有一个NSArray与几个UIImage对象 我现在想做的就是用这些制作电影UIImages 但我不知道该怎么做 我希望有人可以帮助我或向我发送一个代码片段来完成我想要的事情 Edit 供将来参考 应用解决方案后 如果
  • HTML5 数字输入 - 始终显示 2 位小数

    有没有什么办法可以格式化input type number 值总是显示小数点后两位 例 我想看看0 00代替0 按照建议解决并添加一段 jQuery 以强制整数格式 parseFloat this val toFixed 2
  • 如果源 Web 服务器将响应标头中的过期值设置为相对较早之前的时间,会发生什么情况?

    如果源 Web 服务器将响应标头中的过期值设置为相对较早之前的时间 会发生什么情况 例如 考虑当前时间是 2013 年 1 月 25 日星期五 GMT 并且过期标头设置为 gt 到期时间 1994 年 12 月 1 日星期四 16 00 0
  • 在 ggplotly 中设置工具提示参数时,geom_line 不绘制

    我正在尝试在我闪亮的应用程序中使用绘图来实现交互式视觉效果 但是 在尝试向图表添加自定义工具提示时遇到了问题 如果我设置tooltip论证中ggplotly 然后我的geom line 在我的输出中被忽略 但工具提示有效 这是一个 MRE
  • Delphi XE下的工具栏2000?

    旧的 Toolbar 2000 软件包 最好带有 TBX 扩展 是否可以在 Delphi XE 下编译和工作 现在有人使用 Tb2k 和 TBX 吗 TB2K 和 TBX 可以编译吗 Toolbar2000 可以 它被用作 SpTBX 的一
  • 使用 pandas 滚动的滑动窗口迭代器

    如果它是单行 我可以得到迭代器如下 import pandas as pd import numpy as np a np zeros 100 40 X pd DataFrame a for index row in X iterrows
  • Pandas groupby 排名日期时间

    我遇到了关于日期时间排名的问题 可以说我有下表 ID TIME 01 2018 07 11 11 12 20 01 2018 07 12 12 00 23 01 2018 07 13 12 00 00 02 2019 09 11 11 00
  • setOrientationHint 在某些手机的前置摄像头 (HTC) 上逆时针旋转视频

    问题 某些 Android 设备 在问题底部列出 在使用setOrientationHint int degrees 功能用于使用前置摄像头拍摄的视频 预期的行为是视频顺时针旋转 但这些设备逆时针旋转视频 My Goal 识别相机设置或硬件
  • OpenGL ES GL_TEXTURE_RECTANGLE

    有谁知道OpenGL ES是否支持GL TEXTURE RECTANGLE 我计划将它用于 2D 图形以支持非二次幂图像 我当前的实现使用 alpha 0 填充的 POT 纹理 对于拉伸图像效果不佳 它适用于 OpenGL 但我们也计划将其
  • laravel eloquent 中 select() 和 get() 的区别

    使用 laravel eloquent 模型时 get 和 select 方法有什么区别吗 哪种方法更快 是 有一点不同 select 仅用于定义您想要的列 get 用于实际获取结果 gt 执行查询 它还允许您指定列 DB table fo
  • 使用 int[][] 和 int[] 有什么区别? [复制]

    这个问题在这里已经有答案了 来自 perl 背景 我总是使用定义一个 2D 数组int 我知道你可以使用int 那么有什么区别呢 这里的区别在于第一个样本 int 创建了一个锯齿状阵列 而第二个则创建一个矩形阵列 维度 2 在锯齿状数组中
  • MEMORY_BASIC_INFORMATION 结构中的 BaseAddress 和 AllocationBase 有什么区别?

    在 MSDN 中我发现以下内容 BaseAddress 指向页面区域基地址的指针 AllocationBase 指向由 VirtualAlloc 函数分配的一系列页面的基地址的指针 BaseAddress成员指向的页包含在这个分配范围内 但
  • 如何在玉中的链接内添加条件?

    如何在 jade 中的标签内部添加条件 在我的例子中是链接 锚点 这是我的伪代码 当然行不通 a href foo class if current route 1 foo active Go to Foo 怎么样 a href foo c
  • iOS (Safari) 中的 Flutter Web 状态栏

    我尝试更改 safari 浏览器中的状态栏 我搜索了它 有很多关于它的问题 但没有一个解决我的问题 我试过更改状态栏颜色 and 如何更改 chrome 标题颜色 这个蓝色区域位于 iPhone 的凹口周围 我想更改整个应用程序的颜色 感谢
  • css3 跨浏览器不透明度

    我找不到应用 css 跨浏览器不透明度的方法 IE7里有什么好东西 IE8里就别去了 反之亦然 谢谢 d opacity 0 5 filter alpha opacity 50 try this
  • MVCBuildViews 无法正常工作

    因此 我在 MVC 3 RTM 应用程序上编辑了 csproj 文件以设置以下属性
  • Objective-C 优化

    Objective C 是否有标准的优化技巧 可以沿着 C 或 g fast 标签中的 内联 频繁方法加快执行速度 编辑 当 theMethod 有两个 或更多 整数用于输入时 是否有人有一个使用 SEL 和 IMP 的简短示例 这是一个小