Looking for swift Answers? Try Ask4KnowledgeBase
Looking for swift Keywords? Try Ask4Keywords

Swift Languageメモリ管理


前書き

このトピックでは、Swiftランタイムがアプリケーションデータ構造にメモリを割り当てる方法とタイミング、およびそのメモリを再利用するタイミングを概説します。デフォルトでは、メモリバッキングクラスインスタンスは参照カウントによって管理されます。構造体は常にコピーを通過します。ビルトインメモリ管理スキームをオプトアウトするには、[ Unmanaged ] [1]構造を使用することができます。 [1]:https://developer.apple.com/reference/swift/unmanaged

備考

弱いキーワードを使用する場合:

参照を保持しているオブジェクトの存続期間中に参照オブジェクトが割り当て解除される可能性がある場合は、 weakキーワードを使用する必要があります。

unowned-keywordを使用するタイミング:

参照されたオブジェクトが参照を保持するオブジェクトの存続期間中に割り当て解除されることが予想されない場合、 unownedキーワードを使用する必要があります。

落とし穴

頻繁に起こるエラーは、機能が終了した後で生活する必要があるオブジェクトへの参照を作成することを忘れてしまうことです(ロケーションマネージャやモーションマネージャなど)。

例:

class A : CLLocationManagerDelegate
{
    init()
    {
        let locationManager = CLLocationManager()
        locationManager.delegate = self
        locationManager.startLocationUpdates()
    }
}

この例は、イニシャライザが戻った後にロケーションマネージャが割り当て解除されるため、正常に動作しません。適切な解決策は、インスタンス変数としての強力な参照を作成することです。

class A : CLLocationManagerDelegate
{
    let locationManager:CLLocationManager

    init()
    {
        locationManager = CLLocationManager()
        locationManager.delegate = self
        locationManager.startLocationUpdates()
    }
}

メモリ管理 関連する例