带有ARC的AppleScriptObjc中的@autoreleasepool

时间:2013-08-26 01:19:04

标签: objective-c cocoa nsautoreleasepool applescript-objc

我想用Apple在AppleScriptObjc中创建一个autoreleasepool,但我无法保留它。 这是代码:

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?

1 个答案:

答案 0 :(得分:0)

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

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