다음 클래스와 비슷한 firebase와 상호 작용하기 위해 싱글 톤을 아주 광범위하게 사용 해왔다. 싱글 톤을 매우 편리하게 사용할 수 있으므로 사용하기 전에 먼저 더 많은 통찰력을 얻고 싶다. 온라인 과정의 강사 중 한 명은 싱글 톤 사용에 대해 매우주의해야한다고 언급했지만 실제로 이유는 설명하지 않았습니다. 나는 그것을 올바르게 사용할 수있는 방법을 알고 싶습니다. 왜 그것을 사용하는데 매우주의해야합니까?IOS에서의 싱글 톤 사용 및주의해야 할 점
class DataService {
static let dataService = DataService()
private var _BASE_REF = Firebase(url: "\(BASE_URL)")
private var _USER_REF = Firebase(url: "\(BASE_URL)/users")
private var _JOKE_REF = Firebase(url: "\(BASE_URL)/jokes")
var BASE_REF: Firebase {
return _BASE_REF
}
var USER_REF: Firebase {
return _USER_REF
}
var CURRENT_USER_REF: Firebase {
let userID = NSUserDefaults.standardUserDefaults().valueForKey("uid") as! String
let currentUser = Firebase(url: "\(BASE_REF)").childByAppendingPath("users").childByAppendingPath(userID)
return currentUser!
}
var JOKE_REF: Firebase {
return _JOKE_REF
}
또한, 나는 또한 아래 그림과 같이 또 다른 싱글을 (내가 조금 더 먼저 이해하는 것이 원하는대로 나는 아직 작성하지 않은)을 만들려고하고있다. 이러한 "게시물"은 여러 VC에서 액세스 할 수 있습니다. 그 이유는 모든 VC가 충돌을 일으키지 않고 필요한 배열에 액세스 할 수 있도록 싱글 톤을 사용하려고했기 때문입니다. 일반적으로, 이런 종류의 설치에주의해야 할 사항이 있습니까?
죄송합니다. 약간의 문제 일 수 있습니다. 그러나 아이디어는 내가 아는 한 (?? 메모리 할당, 타이밍)이 구체적인 예에서 싱글 톤을 사용하여
class PostService {
static let ps = PostService()
private var _myPosts = [Post]()
private var _otherPeoplesPosts = [Post]()
private var _followingPosts = [Post]()
var myPosts: [Post] {
return _myPosts
}
var otherPeoplesPosts: [Post] {
return _otherPeoplesPosts
}
var followingPosts: [Post] {
return _followingPosts
}
싱글 톤의 요점이 단순히 데이터를 유지하는 것이면 핵심 데이터처럼 사용할 수있는 더 나은 대안이 있습니다. 더 나은 싱글 톤을 사용하는 대신 뷰 컨트롤러에 데이터를 전달할 수 있다면. 메모리 관리는 안전합니다. 속성을 재설정하고 객체가 싱글 톤에 대한 참조를 보유하지 않으면 메모리 누수가 발생하지 않습니다. 내 경험으로는 모든 클래스가 그것을 사용할 수 있고 (UIView, UIViewController, 모든 모델 클래스/구조체 등) 이미지 캐싱과 같은 지속적인 실행 작업이나 서비스가있는 경우에만 싱글 톤을 사용했습니다. –
이미지 캐시는 이미지 캐시의 인스턴스를 만들고 필요할 때 전달할 수 있기 때문에 최상의 예제가 아닙니다. –
"싱글 톤은 앱의 수명 동안 주변을 운반합니다". 이는 휴대 전화에서 앱의 수명 또는 앱이 종료되기 전의 전 생애 시간 (전경 및 배경)을 의미합니까? – user172902