【问题标题】:Adobe After Effects Plugin With Cocoa (Overriding malloc)带有 Cocoa 的 Adob​​e After Effects 插件(覆盖 malloc)
【发布时间】:2010-04-08 09:04:57
【问题描述】:

有点混乱,我有一个工作的 Adob​​e After Effects 插件,其中包含一些 Obj-c / Cocoa(NSArray 和自定义对象 - 不是 ui 的东西)。 SDK 指南指出:-

始终使用 After Effects 内存分配函数。在内存不足的情况下(例如在 RAM 预览期间),插件不与 After Effects 竞争操作系统内存并优雅地处理内存不足的情况非常重要。未能使用我们的功能可能会导致锁定、崩溃和技术支持电话。不要那样做。 如果您要包装现有的 C++ 代码,重载 new 和 delete 以使用我们的函数将节省大量的重新实现。在 Windows 上,从实现 new 和 delete 的公共基类派生所有类。

所以我的问题..在 Obj-c 中可能与上述语句兼容吗?

如果绝对必要,我可能会在 NSObject 上调配 alloc,尽管我不知道像 NSArray 这样的东西是否使用 NSObject 的 alloc 方法。

【问题讨论】:

    标签: cocoa macos malloc


    【解决方案1】:

    NSZone(这是您需要的)不可扩展。 CoreFoundation 的分配器是可扩展的,但并非您分配的所有内容都是下面的 CF 对象。

    除非您在 Objective-C 代码中分配数百兆字节的内存,否则我不会担心。

    【讨论】:

    • 当然,问题是这些数据是否被分配为作为Objective-C对象(这确实是我上面应该说的)。
    • 抱歉,如果没有 openID,我似乎无法投票给答案——我不想要,但我非常感谢你(和其他人)抽出时间帮助我解决这个问题。所以......当你说'不可扩展'时,我不确定你的意思。第一次查看 NSZone 文档看起来很有希望..
    【解决方案2】:

    我认为这将非常困难。

    在我看来,Objective-C 对象的内存分配/释放是复杂的,与不使用 AE 分配函数导致 After Effects 崩溃的风险相比,弄乱它要危险得多。

    这可能是 Adob​​e 的问题。如果他们在 Mac 上支持他们的应用程序,那么他们确实需要提供对 Cocoa/Objective-C 的支持,因为这是当前支持的开发方法。

    如果我是 Adob​​e,我会添加某种内存不足通知,类似于 iPhone SDK 中的-didReceiveMemoryWarning 通知。但这对你目前的情况没有帮助。

    【讨论】:

      【解决方案3】:

      我认为可以做到,但如果你的 UI 不是基于 Cocoa,我也认为你不使用 NSArray 会容易得多。

      【讨论】:

        猜你喜欢
        • 2022-12-16
        • 2015-07-10
        • 2019-02-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-12-02
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多