@autoreleasepool в AppleScriptObjc с ARC


Я хочу сделать autoreleasepool в AppleScriptObjc с ARC, но я не смог сохранить его. Вот код:

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]" можно использовать только без дуги, вместо этого "@autoreleasepool" можно использовать с дугой и без дуги.

В Objective-C мы можем использовать @autoreleasepool. Пример:

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

Но AppleScriptObjc не имеет ' {'или'}', Поэтому мы не можем использовать @autoreleasepool. Однако я попробовал и получил ошибку.
Код:

@autoreleasepool
    ...

Ошибка:

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

Как я могу использовать @autoreleasepool в AppleScriptObjc?

1 2

1 ответ:

Autoreleasepool находится вне вашего контроля - вы не можете сделать это в ASOC. Управление памятью осуществляется фреймворком. Почему именно вы думаете, что вам нужен autoreleasepool? Applescript является однопоточным, и вам придется использовать Objective-C код, если вы хотите попробовать запустить другой потоковый процесс, но это не может быть процесс Applescript/ASOC, только чистый Obj-C.

Смотрите этот пост для дополнительного обсуждения: http://macscripter.net/viewtopic.php?id=41359 Шейн Стэнли-это очень хорошо разбираюсь в ASOC, читаю его посты.