2012-02-11 1 views
1

プログラムの期間中存在するよりも新しいオブジェクトを作成したいとしましょう。スタートアップ時に作成し、プログラム全体でバックグラウンドタスクを継続的に実行する必要があります。 applicationDidFinishLaunchingの下にアプリケーションのデリゲートを置くと、そのオブジェクトはプログラムの期間中か、applicationDidFinishLaunchingのスコープ内に存在するのでしょうか? applicationDidFinishLaunchingが返った後、オブジェクトが有効範囲外になるか、バックグラウンドタスクを実行し続けますか?そうであれば、プログラムの期間中オブジェクトが存在することを確認し、バックグラウンド・タスクを継続して実行するにはどうすればよいですか?ココアのアプリケーション代理店のスコープは制限されていますか?

"バックグラウンドタスク"は別のスレッドで実行されています。私はObjective-CをMac OS X Snow Leopard上のXcode 3.2.6で使用しています。

答えて

1

Objective-Cオブジェクトのライフタイムは、手動で制御されます(ガベージコレクションまたはARCを使用していない場合)。プログラムの期間中存在しているかどうかを尋ねるべきではありません。代わりに、オブジェクト(メインスレッド、バックグラウンドスレッド)に関係なく、オブジェクトへの各参照が正しく保持されるようにする必要があります。 basic memory management rulesを参照してください。

具体的には、[[MyClass alloc] init]でオブジェクトを作成すると、そのオブジェクトへの参照を持ちます(最終的にリリースする責任があります)。新しいスレッドを開始し、そのスレッドにオブジェクトへの参照を渡すと、そのスレッドは[obj retain]を呼び出してオブジェクトが存在し続けることを保証し、オブジェクトが終了すると[obj release]を呼び出す必要があります。

関連する問題