MST

星途 面试题库

面试题:Objective-C中如何检测内存警告

在Objective-C项目里,阐述检测内存警告的具体方法和涉及到的关键类、方法或通知机制。
42.5万 热度难度
编程语言Objective-C

知识考点

AI 面试

面试题答案

一键面试

检测内存警告的方法

  1. 通过通知机制:在Objective-C中,可以注册接收系统发出的内存警告通知。当系统内存紧张时,会发出特定的通知,应用程序可以监听这些通知并做出相应处理。
  2. 重写相关方法:在视图控制器(UIViewController)中,可以重写系统提供的与内存警告相关的方法,当内存警告发生时,系统会调用这些方法。

关键类、方法或通知机制

  1. 通知机制
    • 通知名称UIApplicationDidReceiveMemoryWarningNotification。这是应用程序接收到内存警告时发出的通知名称。
    • 注册通知:在需要监听内存警告的类中(如AppDelegateUIViewController),使用以下代码注册通知:
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(handleMemoryWarning) name:UIApplicationDidReceiveMemoryWarningNotification object:nil];
- **处理通知**:实现`handleMemoryWarning`方法,在方法中进行释放资源等处理操作,例如:
- (void)handleMemoryWarning {
    // 释放一些非必要的资源,如缓存数据等
    NSLog(@"Received memory warning.");
}
  1. 视图控制器相关方法
    • didReceiveMemoryWarning方法:在UIViewController类中,可以重写didReceiveMemoryWarning方法。当内存警告发生时,系统会调用该方法。
- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // 通常在这里释放视图控制器中可以重新创建的资源,例如图片缓存、非当前显示的视图等
    if (self.isViewLoaded && self.view.window == nil) {
        self.view = nil;
    }
}

在应用程序的AppDelegate中也可以通过实现applicationDidReceiveMemoryWarning:方法来处理内存警告,不过在视图控制器中处理更具有针对性,能更好地管理每个视图控制器相关的资源。