[解決済み] Objective-Cのオートリリース・メモリ管理
質問
autorelease をいつ呼び出すか、そしてこれが私のオブジェクトに対して実際に何を行うかを理解しようとしています。
を読んで メモリー管理について Mac Developer Library の中で、新しいオブジェクトを作成してそれを返すというファクトリーメソッドとして機能するメソッドがある場合、そのメソッドはオブジェクトを返す前に解放する方法がない、ということを理解しました。
例
- (Test *) createNewTest
{
Test *newInstance = [[Test alloc] init];
[newInstance release];
return newInstance; // deallocted object returned.
}
代わりに
autorelease
:
NSObject で定義される autorelease メソッドは、受信機を後で解放するためにマークする。
私の質問は、オブジェクトが後で解放される場合、その解放されるタイミングをどのように知ることができるかということです。
- (Test *) createNewTest
{
Test *newInstance = [[test alloc] init];
[newInstance autorelease];
return newInstance;
}
- (void) runIt
{
Test *myInstance = [self createNewTest];
// when is myInstance released?? and thereby not valid to my function anymore?
}
返されたオートリリースオブジェクトを、どうすれば安全に
runIt
メソッドで、いつ自動解放されるかがわからない場合、どうすればよいのでしょうか?メソッドによって返されたオブジェクトを保持すべきでしょうか?
createNewTest
? それとも
runIt
のスコープを使用できますか?
解決方法は?
オートリリース・オブジェクトがオートリリース・プールに追加されました。
オートリリースプール内のオブジェクトは、メインランループの反復処理の終了時に解放されます(または、独自のオートリリースプールを管理している場合やdrainを呼び出した場合は、より早く解放されます)。
オートリリースされたオブジェクトを返すメソッドを呼び出すと、少なくともそのメソッドが呼び出されたスコープの終わりまで有効であることがほぼ保証されます。
もし、より長く生き続けたいのであれば、それを保持し、それを使い終わったら再び解放することを忘れないでください。
関連
-
[解決済み] 'strcmp' はこのスコープで宣言されていません。
-
[解決済み] データソースからのセルの取得に失敗しました。
-
[解決済み] Objective-C ブロックパラメータ 発行 このブロック宣言はプロトタイプではありません
-
[解決済み] Objective-CでNSStringsを連結するためのショートカット集
-
[解決済み] viewDidLoad()は何のためにあるのですか?[重複]する
-
[解決済み] 'CGPointMake' は swift で使用できません [重複] 。
-
[解決済み] Objective-Cの定数
-
[解決済み] Objective-Cで、ある文字列が他の文字列を含んでいるかどうかを調べるにはどうすればよいですか?
-
[解決済み] Objective-Cのtypedef enumとは何ですか?
-
[解決済み] SwiftからObjective-Cのコードを呼び出すにはどうしたらいいですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Xcode 10.2.1 Command PhaseScriptExecutionが0以外の終了コードで失敗した。
-
[解決済み] Xcode コマンド /usr/bin/codesign は終了コード 1 で失敗しました : errSecInternalComponent
-
[解決済み] Xcodeのロギング。"Metal API Validation Enabled"
-
[解決済み] 定義がSwift 2.0の旧値と矛盾する
-
[解決済み] #ifdef DEBUG 対 #if DEBUG
-
[解決済み] swift3におけるセレクタ
-
[解決済み] NSIntegerからNSStringデータ型に変換するにはどうすればよいですか?
-
[解決済み] Unwind segue - インスタンスメソッドのみ @IBAction を宣言でき、ボタンが Exit に接続しない
-
[解決済み] アラート "デバッグを続けるには、開発者ツールへのアクセスが他のプロセスの制御を必要とします。これを許可するにはパスワードを入力してください。
-
[解決済み] iOS Swift 3 - UIDatePicker