我们接触的大多数单例的使用场景,被创建的单例都会一直存活在内存中,造成一定程度的资源浪费。
之前看过一篇文章介绍到 weak Singleton,在所有使用该单例的对象全部释放后,单例本身也会自动释放。这就很有效的解决了上面的问题。
+ (id)sharedInstance
{
static __weak WeakSingletonClass *instance;
WeakSingletonClass *strongInstance = instance;
@synchronized(self) {
if (strongInstance == nil) {
strongInstance = [[[self class] alloc] init];
instance = strongInstance;
}
}
return strongInstance;
}
PS:如果在OC中保证创建的对象始终相同,应该再重写allocWithZone:和copyWithZone:方法。
网友评论