생성 모드 - 단례
의미:
1. 여러 번 만들지 않도록 만든 실례를 항상 한 부 유지합니다.2. 대상과 현실 자원이 대응한다.3. 공유 자원을 봉인한다.
Swift 단례 만들기
1. 글로벌 상수 사용
//
let globalLogger = Logger()
//final ,
final class Logger{
private var data = [String]()
private let arrayQ = DispatchQueue.init(label: "arrayQ")
// ,
fileprivate init() {
}
func log(msg:String){
//
arrayQ.sync {
data.append(msg)
}
}
func printLog(){
for msg in data {
print("Log:\(msg)")
}
}
}
2. 구조체 사용
final class BackupServer {
//
fileprivate init(name:String) {
self.name = name
globalLogger.log(msg: "Created new server \(name)")
}
//BackupServer server,
class var server:BackupServer{
//
struct SingletonWrapper{
// ,
static let singleton = BackupServer.init(name: "MainServer")
}
//
return SingletonWrapper.singleton
}
}
사용 참고:
1. Swift의 단일 예제 모드는 참조 유형, 즉 클래스에만 적용됩니다.구조체와 다른 값 유형은 사용할 수 없다. 왜냐하면 구조체 자체가 복제 기능을 가지고 있기 때문이다.
2. 처리와 병행.예를 들어 공유 자원이기 때문에 안에 수조, 사전 등 집합이 있으면 읽기와 쓰기 작업을 할 때 스레드 안전 문제를 고려하여 여러 개의 스레드가 동시에 하나의 집합을 쓰지 않도록 해야 한다.Swift3의 GCD는 적응이 필요합니다.
func log(msg:String){
//
arrayQ.sync {
data.append(msg)
}
}
barrier
를 사용했는데 그 기능은 barrier block
대기열의 맨 끝에 도달했을 때 직렬 대기열로 바뀌어 모든 작업이 끝날 때까지 기다렸다가 완성된 후에 다음 barrier block
대기열이 나타날 때까지 병렬 대기열을 복구하는 것이다.var arrayQ = DispatchQueue.init(label: "arrayQ")
func logItem(item:T) {
//dispatch_barrier
// barrier , ,
// , barrier
arrayQ.async(execute: DispatchWorkItem.init(qos: DispatchQoS.default, flags: DispatchWorkItemFlags.barrier, block: {
self.dataItems.append(item.copy() as! T)
self.callback(item)
}))
}
demo
예는 모두 여기에 있다
뒤에 쓰기:
내가 쓴 디자인 모델에 관한 내용은 모두 책
《 Swift 》
에서 나온 것이기 때문에 흥미가 있으면 직접 사서 볼 수 있고 나의'왜곡된 이해'를 볼 필요가 없다.나는 단지 짐꾼일 뿐, 과정을 기록하고, 약간의 간단한 이해를 기록할 뿐이다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.