面试题答案
一键面试检测内存警告的方法
- 通过通知机制:在Objective-C中,可以注册接收系统发出的内存警告通知。当系统内存紧张时,会发出特定的通知,应用程序可以监听这些通知并做出相应处理。
- 重写相关方法:在视图控制器(
UIViewController
)中,可以重写系统提供的与内存警告相关的方法,当内存警告发生时,系统会调用这些方法。
关键类、方法或通知机制
- 通知机制:
- 通知名称:
UIApplicationDidReceiveMemoryWarningNotification
。这是应用程序接收到内存警告时发出的通知名称。 - 注册通知:在需要监听内存警告的类中(如
AppDelegate
或UIViewController
),使用以下代码注册通知:
- 通知名称:
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(handleMemoryWarning) name:UIApplicationDidReceiveMemoryWarningNotification object:nil];
- **处理通知**:实现`handleMemoryWarning`方法,在方法中进行释放资源等处理操作,例如:
- (void)handleMemoryWarning {
// 释放一些非必要的资源,如缓存数据等
NSLog(@"Received memory warning.");
}
- 视图控制器相关方法:
didReceiveMemoryWarning
方法:在UIViewController
类中,可以重写didReceiveMemoryWarning
方法。当内存警告发生时,系统会调用该方法。
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// 通常在这里释放视图控制器中可以重新创建的资源,例如图片缓存、非当前显示的视图等
if (self.isViewLoaded && self.view.window == nil) {
self.view = nil;
}
}
在应用程序的AppDelegate
中也可以通过实现applicationDidReceiveMemoryWarning:
方法来处理内存警告,不过在视图控制器中处理更具有针对性,能更好地管理每个视图控制器相关的资源。