2

我想用 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?

4

1 回答 1

0

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

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

于 2013-11-13T19:49:59.030 回答