当前位置:  开发笔记 > 编程语言 > 正文

如何在Objective-C中处理我自己的sharedInstance?

如何解决《如何在Objective-C中处理我自己的sharedInstance?》经验,为你挑选了2个好方法。

如果我有一个具有自身的sharedInstance(单例模式)的类或另一个类的共享实例,那么当我的程序退出时,如何确保正确释放共享实例?更好的是,你能指点我一些关于这方面的文件吗?

示例类(为清晰起见,删除了所有其他方法):

@interface Foo : NSObject {
}
+ (Foo*)sharedInstance;

@end

.m文件:

static Foo* SharedInstance;

@implementation Foo

+ (Foo*)sharedInstance
{
    if (!SharedInstance)
        SharedInstance = [[Foo alloc] init]; // possible memory leak?

    return SharedInstance;
}
@end

在上面的代码中,什么时候可以释放SharedInstance?



1> Barry Wark..:

除非需要释放共享实例之外的资源(例如文件,清理时的通知等),否则可以在应用程序出口处清除sharedInstance的内存.操作系统会在应用程序出口处清除文件和网络套接字等,这样您可以避免清理它们.

如果您确实需要应用程序退出之前执行清理操作,则必须向cleanup共享实例添加一个或类似的方法,并使用静态方法来释放共享实例.



2> Mecki..:

Barry指出,通常没有必要在退出时清理任何东西,但你可以做的是设置一个实现的NSApplication委托

- (void)applicationWillTerminate:(NSNotification *)aNotification

然后在您的应用程序退出之前调用此方法.在此方法中,您可以调用共享实例类的一些静态方法来清理内部缓存的共享实例.

但是,不存在应用程序退出之外的内存泄漏等问题.如果您的应用程序终止,它所拥有的所有内存都将返回给系统,无论它是如何分配的.如果情况并非如此,并且您的应用程序将崩溃,那么它在崩溃之前使用的内存最终会丢失到系统中,这是不可接受的.在多任务操作系统上,崩溃的应用程序不得对系统的其余部分产生任何负面影响!

推荐阅读
jerry613
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有