私は以下のような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
}
シングルトンのポイントが単純にデータを永続させるのであれば、コアデータのような代替手段を使用することができます。より良いシングルトンを使用する代わりに、データをView Controllerに渡すことができます。 メモリ管理に関しては安全です。プロパティをリセットしてオブジェクトがシングルトンへの参照を保持しない場合、メモリリークは起こりません。 私は、すべてのクラスがそれを使用して利益を得ることができる画像キャッシング(UIView、UIViewController、任意のモデルクラス/構造体など)のようなサービスを連続して実行するタスクやサービスを持っていたときにはシングルトンのみを使用しました –
私はイメージ・キャッシュのインスタンスを作成し、必要な場所に渡すことができるので、キャッシュは最良の例でもありません。 –
"シングルトンはアプリの生涯にわたって周りを運んでいる"。これは、フォアグラウンドとバックグラウンドが閉じられる前に、アプリのライフタイムやアプリのライフタイムを意味しますか? – user172902