[解決済み] NSAutoreleasePoolのオートリリース・プールはどのように機能するのですか?
2023-02-01 08:20:17
質問
私の理解では アロック , 新しい または コピー は手動で解除する必要があります。例えば
int main(void) {
NSString *string;
string = [[NSString alloc] init];
/* use the string */
[string release];
}
私の疑問は、しかし、これは同様に有効ではないでしょうか?
int main(void) {
NSAutoreleasePool *pool;
pool = [[NSAutoreleasePool alloc] init];
NSString *string;
string = [[[NSString alloc] init] autorelease];
/* use the string */
[pool drain];
}
どのように解決するのですか?
はい、2番目のコードスニピットは完全に有効です。
オブジェクトに -autorelease が送信されるたびに、それは最も内側の autorelease プールに追加されます。プールが枯渇すると、プール内のすべてのオブジェクトに -release を送信するだけです。
autorelease プールは、単に -release の送信を "later" まで延期することを可能にする便利なものです。その "later" はいくつかの場所で起こる可能性がありますが、Cocoa GUI アプリで最も一般的なのは、現在の実行ループ サイクルの終了時です。
関連
-
[解決済み] キーボードがあるときに、UITextFieldを編集開始時に上に移動させるには?
-
[解決済み】ARCで@autoreleasepoolがまだ必要なのはなぜですか?
-
[解決済み] NSArrayのディープコピー
-
[解決済み] 警告 "format が文字列リテラルでなく、format の引数がない場合"
-
[解決済み] 「アプリケーションはアクティブなコントローラを表示しようとした」?
-
[解決済み] NSTimeInterval(秒)を分単位に変換する方法
-
[解決済み] APNSのデバイストークンは、一度作成すると変更されることはありますか?
-
[解決済み] NSStringの最初の3文字を取得するには?
-
[解決済み] UIButtonのテキストを変更する
-
[解決済み] Xcode 4(および依存関係)におけるコンパイル、ビルド、またはアーカイブの問題
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] NSPredicate: NSDateプロパティの日によるオブジェクトのフィルタリング
-
[解決済み] 複数のサブクラスで1つのストーリーボードuiviewcontrollerを使用する方法
-
[解決済み] NSArrayのディープコピー
-
[解決済み] Objective-Cでオブジェクトのプロパティリストを取得する
-
[解決済み] Objective-Cで`oneway void`の使用例?
-
[解決済み] Objective-CでQueueを作成し、使用するにはどうすればよいですか?
-
[解決済み] AppDelegateからストーリーボード上の異なる場所で条件付きで開始する。
-
[解決済み] 宣言されたプロパティは、対応するインスタンス変数を必要としますか?
-
[解決済み] hitTest:withEventを使用して、スーパービューのフレーム外にあるサブビューのタッチをキャプチャする。
-
[解決済み] objective-cのクラスインスタンスを名前で作成する?