0

「リーク」を介して何度もメモリをチェックしたところ、常にリークが存在することがわかりました。私を助けてもらえますか?

ここにコード:

NSAppleScript* startFinder = [[NSAppleScript alloc] initWithSource:
                                  @"tell application \"Finder\"\n"
                                  @"    delay 1\n"
                                  @"    try\n"
                                  @"        «event GKKJload»\n"
                                  @"    on error msg number num\n"
                                  @"        display dialog \"another try\"  buttons{\"i see\"} default button 1 with icon caution  with title \"aaa\"\n"
                                  @"    end try\n"
                                  @"end tell"];
[startFinder executeAndReturnError:nil];
[startFinder release];

誰にでも事前に感謝します。

4

2 に答える 2

0

これは私がするようなことです。スクリプトを編集、コンパイル、および実行するためのモデル ビュー コントローラーを開発しました。

あなたのようなケースでは、モデルのみを使用します。私の ScriptModel クラスでは、それは別の抽象化レイヤーですが、それは良いことだと思います。ScriptModel の実装を NSAppleScript または OSAScript に変更することで、すべての AppleScript への呼び出しを変更できます。

- (IBAction)test01:(id)sender
{
    ScriptModel* startFinder = [[ScriptModel alloc] initWithSource:
                                  @"tell application \"Finder\"\n"
                                  @"    delay 1\n"
                                  @"    try\n"
                                  @"        «event GKKJload»\n"
                                  @"    on error msg number num\n"
                                  @"        display dialog \"another try\"  buttons{\"i see\"} default button 1 with icon caution with title \"aaa\"\n"
                                  @"    end try\n"
                                  @"end tell"];
    ScriptResult *scriptResult = [startFinder run];
}

私は ARC を使用しているので、私のコードは問題なく動作すると思います。ARC でリリース メソッドを呼び出すことができません。

考慮すべきもう 1 つのオプションは、OSAScript ではなく NSAppleScript を使用せず、AppleScript ソースをまったく使用せず、Scripting Bridge を使用する代わりに Objective-C 呼び出しを使用することです。

/*

Scripting Bridge for Objective-C
http://www.macosxautomation.com/applescript/features/scriptingbridge.html

Although the Objective-C language has existing mechanisms for sending Apple Events, the new Scripting Bridge architecture greatly simplifies the coding necessary to query and control scriptable applications.
*/

#import <Foundation/Foundation.h>
#import <ScriptingBridge/ScriptingBridge.h>
#import "iTunes.h"

int main()
{
iTunesApplication *iTunes = [SBApplication applicationWithBundleIdentifier:@"com.apple.iTunes"];

NSLog(iTunes.currentTrack.name);
}

Objective-C 内から AppleScript を実行することは、ユーザーがアプリをカスタマイズできるようにスクリプトを開きたい場合にのみ意味があると思います。Objective-C コードに AppleScript を埋め込むのではなく、Scripting Bridge を他のすべてに使用することを考えています。

于 2013-08-06T20:02:32.460 に答える