这与 segue 无关,所以不要自己混淆这个问题。
引用计数对象的基本处理是,只要至少有一个对该对象的引用,它就不会被释放。但是,一旦引用计数达到零,对象将被释放。
所以,如果你想让一个对象保持“活跃”,那么你需要以某种方式保持对它的引用。如果您希望您的数据库在程序的整个生命周期内都存在,通常的模式是使用“单例”对象。这可以通过多种方式实现。一个简单的方法是模仿常见的单例模式:
@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
代码除了使其成为线程安全之外,还将确保创建代码只运行一次。函数内部的静态对象将保留对该对象的引用,因此它永远不会被释放......并且在程序的整个生命周期中都存在。
这是处理这种情况的一种常见模式,但还有许多其他模式。关键是,如果你想要一个对象存在,你必须保持对它的引用。将其传递给每个视图控制器,或将其保存在“公共”位置,或在不需要时将其存档到磁盘,并在以后需要时重新水合它……有很多方法可以做到……