これはセグとは何の関係もないので、自分で問題を混同しないでください。
参照カウントされたオブジェクトの基本的な扱いは、オブジェクトへの参照が少なくとも1つある限り、割り当てが解除されないことです。ただし、参照カウントがゼロに達すると、オブジェクトの割り当てが解除されます。
したがって、オブジェクトを「存続」させたい場合は、何らかの方法でオブジェクトへの参照を保持する必要があります。プログラムの存続期間中データベースが存在することを期待する場合、通常のパターンは「シングルトン」オブジェクトを使用することです。これは多くの方法で達成できます。簡単な方法は、一般的なシングルトンパターンを模倣することです。
@interface Database : NSObject
+ (Database*)sharedInstance;
// other stuff for your class
@end
@implementation Database
+ (Database*)sharedInstance {
static Database *instance;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
instance = [[Foo alloc] init];
// Any other initialization necessary...
});
return instance;
}
@end
このdispatch_once
ようなものは、マルチスレッドアプリケーション(すべてのiOSアプリがそうであるべきです)の正確さを保証します。
さて、あなたがあなたの「共有」Database
オブジェクトを必要とするとき...
Database *database = [Database sharedInstance];
このdispatch_once
コードは、スレッドセーフにするだけでなく、作成コードが1回だけ実行されるようにします。関数内の静的オブジェクトはオブジェクトへの参照を保持するため、割り当てが解除されることはなく、プログラムの存続期間中存続します。
これは、この状況に対処するための一般的なパターンの1つですが、他にも多くのパターンがあります。重要なのは、オブジェクトを存続させたい場合は、そのオブジェクトへの参照を保持する必要があるということです。各ViewControllerに渡すか、「共通の」場所に保管するか、不要なときにディスクにアーカイブし、後で必要になったときに再水和します...さまざまな方法で...