iOS开发之NSobject--------sharedInstance

毛镜
2023-12-01

如果我有一个类,有一个sharedInstance本身或另一个类的共享实例,在程序正常退出时我该如何确保共享的实例被释放?

@interface Foo : NSObject
+ (Foo*)sharedInstance;
@end

 .m文件:

static Foo* SharedInstance;
@implementation Foo
+ (Foo*)sharedInstance {
    if (!SharedInstance)
        SharedInstance = [[Foo alloc] init]; // 会发生内存泄露?
    return SharedInstance;
}
@end
在上面的例子中,SharedInstance什么时候释放呢?
回答:
通常在程序任意退出的时候都没有必要清理SharedInstance,但如果你希望清理那么你可以设置NSApplication委托实现内存清理
- (void)applicationWillTerminate:(NSNotification*)aNotification
调用此方法的之前,您的应用程序将退出。在此方法中,你可以调用一些您的共享实例类的静态方法来清理内部缓存共享实例。

然而,像内存泄漏的情况一般喂养在应用程序退出之外是不存在。如果您的应用程序终止时,它会将曾经拥有的所有的内存还给系统,它是如何分配的问题。如果实际的情况并非如上面所说的那样,您的应用程序崩溃,内存用在飞机坠毁前将最终失去了系统,这是不能接受的。在一个多任务的操作系统,应用程序崩溃,必须对系统的其余部分没有任何负面影响!

 类似资料: