[Swift]シングルループモードとは?


単輪図案はデザイン図案です.まず、デザインモデルとは何かを簡単に理解します.

デザインモードとは?


デザインモデルの根本的な言語解釈から始めましょう.
デザイン->デザイン/モード->フォーマットで説明できます.簡単に言えば、コードを書くためのデザインスタイルです.符号化時にコードを役割、機能別に区分し、コードのメンテナンスに有利である.自動車を例にとると、印刷物と分装部品のどちらがメンテナンスに有利ですか?もちろん、部品の組み立てはずっと有利です.完成品に追突事故が発生した場合、車全体を交換する必要があります.このように,コードも最良の分割方式であり,この分割方式を設計モードと見なせばよい.
設計モードの利点はメンテナンス以外に無限です.コードと設計モードを適切なドキュメントとして作成すると、数ヶ月または数年後に現在のコードを再表示しても、そのモードを認識し、コードが何をしているかを知ることができます.実際には、将来コードを表示する人(将来または他の開発者)が、コードがどのように機能しているかを理解するのに役立ちます.
設計モードに含まれる2つの哲学はコード再利用性と柔軟性である.ソフトウェアアーキテクチャとしては、再利用可能で柔軟なコードを記述する必要があります.これにより、後でコードを簡単に維持でき、将来のニーズを満たすためにアプリケーションを簡単に拡張できます.
しかし、いずれにしても、デザインモデルは手段にすぎず、目的にはならない.

デザインパターンのタイプ



デザインパターンの種類はたくさんありますが、今日は単輪パターンについて理解してみましょう.

たんかいてんアレイ


単輪パターンとは、特定の用途で1つのインスタンスのみを生成し、共用したい場合に使用する設計タイプである.
クラスインスタンスを最初に作成する場合は、一度作成してグローバルに配置し、後でインスタンスにアクセスできるようにします.
理解を助けるために、例を挙げます.
class StudentInfo {
  var name: String?
  var age: Int?
  var grade: Int?
}
Student情報を格納するクラスがあり、A ViewControllerにname、B ViewControllerにage、C ViewControllerにgradeを入力してStudentInfoというクラスに格納します.
この場合、各ViewControllerが各Studio Infoインスタンスを作成して保存すると、各インスタンスのプロセスにのみ格納されます.
//A ViewController
let studentInfo = StudentInfo()
studentInfo.name = "Tak"
//B ViewController
let studentInfo = StudentInfo()
studentInfo.age = 27
//C ViewController
let studentInfo = StudentInfo()
studentInfo.grade = 2

StudentInfoという名前のインスタンスにすべての情報を格納したいと考えています.この場合はシングルループモードが適しています.他にも方法があります(各ViewControllerのインスタンスの作成を続行するか、必要に応じてインスタンスを参照に渡します).うっかりするとメモリが無駄になり、コードが長くなり、ごちゃごちゃになります.
単一インスタンス・モードを使用すると、1つのインスタンスのクラスに次のようにアクセスできます.
では、単一周モードを実装する方法について説明します.

Singleton Patternの実装方法


まず、アクセス可能なグローバルに格納されるので、staticを使用してpropertyを作成してインスタンスを格納します.
class StudentInfo {
  static let shared = StudentInfo()
  
  var name: String?
  var age: Int?
  var grade: Int?
}
次に、init関数アクセス制御プログラムをprivateに設定し、init関数を再呼び出してインスタンスを作成しないようにします.
class StudentInfo {
  static let shared = StudentInfo()
  
  var name: String?
  var age: Int?
  var grade: Int?
  
  private init() {}
}
Init()はpropertyに初期値または初期化値を割り当てる構文です.これからもっと詳しく話し合いましょう
これで終わりです.簡単ですね.
外部からアプローチする方法も簡単です.
上記で生成した静的プロパティを利用すればよい.
//A ViewController
let studentInfo = StudentInfo().shared
studentInfo.name = "Tak"
//B ViewController
let studentInfo = StudentInfo().shared
studentInfo.age = 27
//C ViewController
let studentInfo = StudentInfo().shared
studentInfo.grade = 2
上述したように、sharedという静的propertyアクセスを使用すると、どのクラスでもインスタンスが共有されます.
最後にSingletonの長所と短所を見てみましょう
  • の利点
  • インスタンスのみを作成し、メモリの無駄を回避します.
  • グローバルインスタンスで、他のクラスとリソースを共有しやすい.
  • これらのオブジェクトは、
  • データベース接続プールなどの複数の共通オブジェクトを作成して使用する必要がある場合によく使用されます.(書き込みプール、キャッシュ、ダイアログ、ユーザー設定、レジストリ設定、ログオブジェクトなど)->まだ見つかりません.また後で!
  • の欠点
  • 単一インスタンスが多すぎたり、共有しすぎたりすると、他のクラスインスタンス間の結合度が向上し、「オープン=クローズ」の原則に違反します.(オブジェクト向けの設計原則に違反)->修正とテストが困難になります.
  • SwiftからのSingleton(まだわかりませんが、理解が必要です)


    Singletonの作成はマルチスレッド環境では安全ではありません(複数のスレッドを同時に作成すると2つまたは3つのInstanceが作成される場合があります)
    でも!!!!!!!SWIFTは上のようにする必要はありません
    staticを使用してタイプpropertyとしてインスタンスを作成した場合、使用時に初期化(lazy)!?
    したがって、Singleton Instanceは最初に作成されるまでメモリに入りません.
    Dispatchを一度自動適用!!
    したがって、特別なコードがない場合、複数のInstanceは作成されません.
    Thread-Safeメソッド
    注意:
  • https://babbab2.tistory.com/66!
  • https://fomaios.tistory.com/entry/iOS-面接問題とはモノトーンモード
  • 図書-プロトコル向けプログラミング