【问题标题】:@autoreleasepool in AppleScriptObjc with ARC带有 ARC 的 AppleScriptObjc 中的 @autoreleasepool
【发布时间】:2013-08-26 01:19:03
【问题描述】:

我想用 ARC 在 AppleScriptObjc 中创建一个自动释放池,但我无法保留它。 代码如下:

property NSAutoreleasePool : class "NSAutoreleasePool"
script AppDelegate
    ...
    on buttonClicked_(sender)
        set pool to NSAutoreleasePool's alloc()'s init()
        ...
        pool's drain()
    end buttonClicked_
end script

在代码中,我得到了这个调试错误:

-[NSAutoreleasePool retain]: Cannot retain an autorelease pool (error -10000)

我搜索了一下,发现“[[NSAutoreleasepool alloc] init]”只能在没有 ARC 的情况下使用,相反,“@autoreleasepool”可以与 ARC 一起使用,也可以不使用 ARC。

在 Objective-C 中,我们可以使用@autoreleasepool。示例:

int main()
{
    @autoreleasepool {
        ...
    }
}

但是 AppleScriptObjc 没有'{'或'}',所以我们不能使用@autoreleasepool。但是,我试过了,我得到了一个错误。
代码:

@autoreleasepool
    ...

错误:

error: Expected “end” but found unknown token. (-2741)

如何在 AppleScriptObjc 中使用 @autoreleasepool?

【问题讨论】:

  • 我只是在学习,但我希望使用 ARC,您不需要任何自动释放池。为什么需要一个?
  • 那是因为我在后台使用以下代码运行了一个函数:performSelectorInBackground_withObject_("function", AppDelegate) 这让我拥有了自动释放池。

标签: objective-c cocoa nsautoreleasepool applescript-objc


【解决方案1】:

Autoreleasepool 不在您的控制范围内 - 您无法在 ASOC 中执行此操作。内存管理由框架处理。为什么你认为你需要自动释放池? Applescript 是单线程的,如果您想尝试启动另一个线程进程,则必须使用 Objective-C 代码,但它不能是 Applescript/ASOC 进程,只能是纯 Obj-C。

有关此问题的更多讨论,请参阅此帖子:http://macscripter.net/viewtopic.php?id=41359Shane Stanley 对 ASOC 非常了解,请阅读他的帖子。

【讨论】:

    猜你喜欢
    • 2011-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-23
    • 1970-01-01
    • 2012-01-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多