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

本文讨论了Objective-C中共享实例的内存管理问题,特别是在程序退出时如何确保这些实例得到妥善清理。文章提供了通过设置NSApplication委托来实现内存清理的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

如果我有一个类,有一个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
调用此方法的之前,您的应用程序将退出。在此方法中,你可以调用一些您的共享实例类的静态方法来清理内部缓存共享实例。

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值