@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 ответ:
Autoreleasepool находится вне вашего контроля - вы не можете сделать это в ASOC. Управление памятью осуществляется фреймворком. Почему именно вы думаете, что вам нужен autoreleasepool? Applescript является однопоточным, и вам придется использовать Objective-C код, если вы хотите попробовать запустить другой потоковый процесс, но это не может быть процесс Applescript/ASOC, только чистый Obj-C.
Смотрите этот пост для дополнительного обсуждения: http://macscripter.net/viewtopic.php?id=41359 Шейн Стэнли-это очень хорошо разбираюсь в ASOC, читаю его посты.