MST

星途 面试题库

面试题:Objective-C 中如何实现简单的网络缓存机制

在Objective-C里,假设你正在开发一个简单的网络请求功能,需要对请求结果进行缓存。请描述你会采用什么样的数据结构来实现缓存,并且简述在收到新的网络请求时,如何判断数据是否在缓存中,若在缓存中如何处理,若不在又如何处理。
49.1万 热度难度
编程语言Objective-C

知识考点

AI 面试

面试题答案

一键面试
  1. 数据结构选择
    • 可以选择NSMutableDictionary作为缓存的数据结构。NSMutableDictionary能够以键值对的形式存储数据,非常适合缓存场景。其中,键可以是网络请求的URL(经过适当处理,如使用NSStringhash值等确保唯一性),值则是对应的请求结果。
  2. 判断数据是否在缓存中
    • 在收到新的网络请求时,首先获取该请求的URL(或其唯一标识)。
    • 使用该URL作为键,调用NSMutableDictionaryobjectForKey:方法来判断缓存中是否存在对应的数据。例如:
NSDictionary *cache = // 假设已初始化的缓存字典
id cachedData = [cache objectForKey:requestURL];
if (cachedData) {
    // 数据在缓存中
} else {
    // 数据不在缓存中
}
  1. 数据在缓存中的处理
    • 直接返回缓存中的数据,无需再次发起网络请求。这样可以节省网络资源和时间,提高应用程序的响应速度。例如:
if (cachedData) {
    // 直接返回缓存数据给调用者
    return cachedData;
}
  1. 数据不在缓存中的处理
    • 发起网络请求获取数据。
    • 网络请求成功后,将获取到的数据存储到缓存字典中,使用请求的URL作为键。例如:
// 发起网络请求,假设这里使用NSURLSession
NSURLSessionDataTask *task = [[NSURLSession sharedSession] dataTaskWithURL:requestURL completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
    if (!error && data) {
        // 将数据存储到缓存
        [cache setObject:data forKey:requestURL];
        // 处理获取到的数据,如解析等,并返回给调用者
    }
}];
[task resume];