2013-08-26 7 views
2

Я хочу сделать 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] инициализации]» может быть использован только без ARC вместо этого «@autoreleasepool» может использоваться с ARC и без ARC.

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

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

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

@autoreleasepool 
    ... 

Ошибка:

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

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

+0

Я просто учился, но я бы хотел, чтобы с ARC вам не нужно было создавать пулы с автоматической версией. Зачем вам это нужно? – Kaydell

+0

Это потому, что я запускал функцию в фоновом режиме с помощью этого кода: 'performSelectorInBackground_withObject _ (« function », AppDelegate)' Это заставляет меня иметь пулы авто-релизов. – usingsystem8

ответ

0

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

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

Смежные вопросы