2013-08-26 74 views
2

我想使用ARC在AppleScriptObjc中創建一個autoreleasepool,但我無法保留它。 下面的代碼:@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肖恩·斯坦利對ASOC非常瞭解,閱讀他的文章。