バックグラウンドスレッドでプールリリースオブジェクトを自動解放するのはいつですか?

dowZhang

自動解放プールは、runloopが状態のときにオブジェクトを解放することを知っていますkCFRunLoopBeforeWaiting

そこで、runloopがデフォルトで実行されないバックグラウンドスレッドを作成します。

このバックグラウンドスレッドで自動解放プールを使用すると、いつオブジェクトが解放されますか。

SolaWing

https://developer.apple.com/documentation/foundation/nsautoreleasepool?language=objc

自動解放プールは、自動解放オブジェクトを保持するための無制限のスタックです。自動解放プールを作成すると、プールスタックがウォッチャーをプッシュします。オブジェクトに対して自動解放を呼び出すと、オブジェクトはプールスタックにプッシュされます。自動解放プールを解放すると、ウォッチャーの後にプッシュされたすべてのオブジェクトが解放され、ウォッチャーが削除されます。

objcの@autoreleaseまたはswiftのautoreleaseは、自動解放プールを作成し、ブロックを呼び出してからプールを解放するための単なるラッパーです。

runloopは、タスクを自動解放プールに自動的にラッパーします。

しかし、runloopを持たないカスタムスレッドで自動解放プールを使用すると、私の観察では、スレッドが終了するとオブジェクトが解放されます。

自動リリースのタイミングを観察する方法

deinitが定義されたカスタムウォッチクラスを作成し、それを手動で保持および自動解放して、deinitのタイミングを監視できます。以下のようなコード

class A {
    deinit {
        print("a dealloced")
    }
}

var p: pthread_t?
_ = pthread_create(&p, nil, { (p) -> UnsafeMutableRawPointer? in
    do {
        let a = A()
        _ = Unmanaged.passRetained(a).autorelease()
    }
    print("will exit pthread")
    return nil
}, nil)
pthread_join(p!, nil)
print("finish")

このスクリプトは印刷されます

will exit pthread
a dealloced
finish

また、deinitでブレークポイントを設定して、自動解放のバックトレースを確認することもできます。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

バックグラウンドスレッドでプールリリースオブジェクトを自動解放するのはいつですか?

分類Dev

バックグラウンドスレッドでフリーズ可能なオブジェクトを作成する際のリソースリーク

分類Dev

iOS9-このアプリケーションは、バックグラウンドスレッドから自動レイアウトエンジンを変更しています-どこですか?

分類Dev

シェル スクリプトでバックグラウンド ジョブの数を制御する方法

分類Dev

Pythonスクリプトのバックグラウンドでオーディオ(playsound)を再生するにはどうすればよいですか?

分類Dev

スクレイピングのためのブラウザの自動化:ドロップダウン/オートコンプリート入力ボックスが原因でページが不可能ですか?

分類Dev

テンプレートが静的バインディングであるにもかかわらず、古いコードのオブジェクトファイルがジェネリックプログラミングパラダイムを使用する新しいコードを使用できるのはなぜですか?

分類Dev

オブジェクトをドラッグせずにクリックして、シーンビューのマウスポイントにオブジェクトを作成するにはどうすればよいですか?

分類Dev

クラスのオブジェクトのリストを、1つのフィールドが再び他のクラスのオブジェクトであるdatagridviewにバインドするにはどうすればよいですか?

分類Dev

クラスのオブジェクトのリストを、1つのフィールドが再び他のクラスのオブジェクトであるdatagridviewにバインドするにはどうすればよいですか?

分類Dev

ユーザーNSContactsの友達検索ページが非常に遅い+「このアプリケーションはバックグラウンドスレッドから自動レイアウトエンジンを変更しています」

分類Dev

Linuxのバックグラウンドでアプリケーションを自動的に起動していくつかのステップを進めるにはどうすればよいですか?

分類Dev

バイナリファイルをクラウドオブジェクトストレージからノートブックファイルシステムに保存するにはどうすればよいですか?

分類Dev

グーグルクラウドストレージでは、オブジェクトのバージョン管理が有効になっているオブジェクトを上書きするための早期解約料金を支払いますか?

分類Dev

バックグラウンドページとバックグラウンドスクリプトの違いは何ですか?

分類Dev

イオンプロジェクト用のコルドババックグラウンドジオロケーションv3.0をインストールするにはどうすればよいですか?

分類Dev

スクリプトまたはスクリプトが作成するバックグラウンドジョブのいずれかでエラーが発生した場合は、bashスクリプトを終了します

分類Dev

なぜgitが「最適なパフォーマンスのためにバックグラウンドでリポジトリを自動パッキングする」というメッセージを表示し続けるのですか?

分類Dev

javafx:オブジェクト自体が監視可能リストから削除されたときに、オブジェクトのバックグラウンドタスクの実行を停止するにはどうすればよいですか?

分類Dev

バックグラウンドでbashスクリプトを自動的に実行する方法は?

分類Dev

Pythonでマルチスレッドを使用するオブジェクトのリストのForループ

分類Dev

バックグラウンドスレッドからUWPアプリの現在のビューを取得するにはどうすればよいですか?

分類Dev

Linuxのコマンドライン(別名bashスクリプト)からデバッグモードでQtプロジェクトをビルドする

分類Dev

ドラッグアンドドロップでifステートメントを使用して、ドラッグされたオブジェクトに応じて異なるリンクを開くにはどうすればよいですか?

分類Dev

添付のスクリーンショットのような動的グリッドレイアウトを、ブートストラップを使用して番号順に表示するにはどうすればよいですか?

分類Dev

このアプリケーションは、バックグラウンドスレッドから自動レイアウトエンジンを変更しているため、エンジンの破損や奇妙なクラッシュが発生する可能性があります

分類Dev

iOS9このアプリケーションは、バックグラウンドスレッドから自動レイアウトエンジンを変更しているため、エンジンの破損や奇妙なクラッシュが発生する可能性があります

分類Dev

Xcode7:このアプリケーションは、バックグラウンドスレッドから自動レイアウトエンジンを変更しているため、エンジンの破損や奇妙なクラッシュが発生する可能性があります

分類Dev

「このアプリケーションは、バックグラウンドスレッドから自動レイアウトエンジンを変更しているため、エンジンの破損や奇妙なクラッシュが発生する可能性があります。...」

Related 関連記事

  1. 1

    バックグラウンドスレッドでプールリリースオブジェクトを自動解放するのはいつですか?

  2. 2

    バックグラウンドスレッドでフリーズ可能なオブジェクトを作成する際のリソースリーク

  3. 3

    iOS9-このアプリケーションは、バックグラウンドスレッドから自動レイアウトエンジンを変更しています-どこですか?

  4. 4

    シェル スクリプトでバックグラウンド ジョブの数を制御する方法

  5. 5

    Pythonスクリプトのバックグラウンドでオーディオ(playsound)を再生するにはどうすればよいですか?

  6. 6

    スクレイピングのためのブラウザの自動化:ドロップダウン/オートコンプリート入力ボックスが原因でページが不可能ですか?

  7. 7

    テンプレートが静的バインディングであるにもかかわらず、古いコードのオブジェクトファイルがジェネリックプログラミングパラダイムを使用する新しいコードを使用できるのはなぜですか?

  8. 8

    オブジェクトをドラッグせずにクリックして、シーンビューのマウスポイントにオブジェクトを作成するにはどうすればよいですか?

  9. 9

    クラスのオブジェクトのリストを、1つのフィールドが再び他のクラスのオブジェクトであるdatagridviewにバインドするにはどうすればよいですか?

  10. 10

    クラスのオブジェクトのリストを、1つのフィールドが再び他のクラスのオブジェクトであるdatagridviewにバインドするにはどうすればよいですか?

  11. 11

    ユーザーNSContactsの友達検索ページが非常に遅い+「このアプリケーションはバックグラウンドスレッドから自動レイアウトエンジンを変更しています」

  12. 12

    Linuxのバックグラウンドでアプリケーションを自動的に起動していくつかのステップを進めるにはどうすればよいですか?

  13. 13

    バイナリファイルをクラウドオブジェクトストレージからノートブックファイルシステムに保存するにはどうすればよいですか?

  14. 14

    グーグルクラウドストレージでは、オブジェクトのバージョン管理が有効になっているオブジェクトを上書きするための早期解約料金を支払いますか?

  15. 15

    バックグラウンドページとバックグラウンドスクリプトの違いは何ですか?

  16. 16

    イオンプロジェクト用のコルドババックグラウンドジオロケーションv3.0をインストールするにはどうすればよいですか?

  17. 17

    スクリプトまたはスクリプトが作成するバックグラウンドジョブのいずれかでエラーが発生した場合は、bashスクリプトを終了します

  18. 18

    なぜgitが「最適なパフォーマンスのためにバックグラウンドでリポジトリを自動パッキングする」というメッセージを表示し続けるのですか?

  19. 19

    javafx:オブジェクト自体が監視可能リストから削除されたときに、オブジェクトのバックグラウンドタスクの実行を停止するにはどうすればよいですか?

  20. 20

    バックグラウンドでbashスクリプトを自動的に実行する方法は?

  21. 21

    Pythonでマルチスレッドを使用するオブジェクトのリストのForループ

  22. 22

    バックグラウンドスレッドからUWPアプリの現在のビューを取得するにはどうすればよいですか?

  23. 23

    Linuxのコマンドライン(別名bashスクリプト)からデバッグモードでQtプロジェクトをビルドする

  24. 24

    ドラッグアンドドロップでifステートメントを使用して、ドラッグされたオブジェクトに応じて異なるリンクを開くにはどうすればよいですか?

  25. 25

    添付のスクリーンショットのような動的グリッドレイアウトを、ブートストラップを使用して番号順に表示するにはどうすればよいですか?

  26. 26

    このアプリケーションは、バックグラウンドスレッドから自動レイアウトエンジンを変更しているため、エンジンの破損や奇妙なクラッシュが発生する可能性があります

  27. 27

    iOS9このアプリケーションは、バックグラウンドスレッドから自動レイアウトエンジンを変更しているため、エンジンの破損や奇妙なクラッシュが発生する可能性があります

  28. 28

    Xcode7:このアプリケーションは、バックグラウンドスレッドから自動レイアウトエンジンを変更しているため、エンジンの破損や奇妙なクラッシュが発生する可能性があります

  29. 29

    「このアプリケーションは、バックグラウンドスレッドから自動レイアウトエンジンを変更しているため、エンジンの破損や奇妙なクラッシュが発生する可能性があります。...」

ホットタグ

アーカイブ