草庐IT

ios - NSCache 什么时候释放缓存对象?

我已经实现了一个列表,其中异步加载了许多大图像。我正在使用NSCache的实例来存储这些UIImage文件。当我向下滚动时,我加载了越来越多的图像。我设置了它并分析了应用程序的分配情况,我注意到缓存似乎没有释放任何内存。“LiveBytes”字段已增加到165MB并且还在增加。缓存开始释放内存的限制是多少?还是必须自己设置? 最佳答案 您需要通过调用[NSCachesetCountLimit:]来指定缓存限制和[NSCachesetTotalCostLimit:].参见[NSCachesetObject:forKey:cost:]为

iphone - 键值观察NSCache

我想在NSCache实例中某个键对应的对象发生变化时得到通知。我试过使用键值观察,但没有成功(控制台没有记录任何内容)。-(void)viewDidLoad{[superviewDidLoad];[self.cacheaddObserver:selfforKeyPath:@"myKey"options:NSKeyValueObservingOptionNewcontext:NULL];[self.cachesetObject:@"myObject"forKey:@"myKey"];}-(void)observeValueForKeyPath:(NSString*)keyPathofOb

ios - NSUserDefaults 或 NSCache - 存储数据的最佳方式

我正在构建一个IOS应用程序,它基本上可以帮助用户查看他在我的网站上所下的订单。在应用程序启动时,他的订单列表会自动重新加载。我在这里要做的是将这些数据“保存”到某种东西中,即使他没有连接到互联网也能向他显示他的订单。我已经使用NSUserDefaults类来保存凭据,但我不确定这是保存更一致数据的正确方法(这里包含一个NSArray顺序)。我听说过NSCache类,这也是一种可能性,但我真的不知道哪个对我来说是最好的。有人可以给我一些提示吗? 最佳答案 您确实通过使用NSUserDefaults做了正确的事情。如果需要,您可以使用

ios - 检查 iOS 上的 NSCache 内容?

有没有办法检查NSCache的内容以进行调试?这不会在AppStore中使用。我只是希望能够在调试时看到那里发生了什么。description毫无用处。 最佳答案 无需使用第三方库。您可以使用NSCache中的“allObjects”键来执行此操作。例如:ifletall=yourCache.value(forKey:"allObjects")as?NSArray{forobjectinall{print("objectis\(object)")}} 关于ios-检查iOS上的NSCac

iphone - 使用全局 NSCache 还是每个类一个?

我想知道是使用一个全局NSCache实例还是为每个需要它的组件使用多个实例更好。例如,我有几个View子类将内容绘制到图像中并缓存它们以避免一直重新生成它们。每个类有一个NSCache实例还是整个应用程序只有一个集中式NSCache更好?我不是说每个对象实例一个缓存!我说的是每个类的一个NSCache实例。 最佳答案 这显然视情况而定,但我通常会为每种类型的缓存对象投票支持一个缓存。这样,您可以为每个值设置不同的countLimit值,例如指定诸如“保留50个最近呈现的缩略图”、“保留5个最近下载的大图像”、“保留10个最近下载的P

ios - 当应用程序进入后台时,NSCache 总是驱逐图像数据

这可能是预期的行为,但Apple并未明确说明。我正在使用NSCache为我的UICollectionView缓存一些图像。当我将应用程序置于后台并(立即)再次打开它时,我所有的图像都不再位于NSCache中。理想情况下,我希望将最近加载的图像保留在缓存中,这样当用户重新打开应用时,他们就不必支付再次加载所有图像的费用。看起来NSCache应该允许不太激进的缓存策略。我只是想在这里发帖进行完整性检查,确保我没有遗漏任何明显的东西。否则,我将不得不实现自己的缓存,将最后25个加载的图像保存在NSMutableDictionary缓存中。 最佳答案

iphone - NSCache 自动删除策略

NSCache的一些自动删除策略是什么?Apple的文档没有提到它们,我实验发现NSCache没有响应内存警告。 最佳答案 NSCache不响应UIApplicationDidReceiveMemoryWarningNotification,但它会在内存不足的情况下自动驱逐其对象,显然使用了一些其他机制。虽然我之前建议观察UIApplicationDidReceiveMemoryWarningNotification,但事实并非如此。不需要对低内存情况进行特殊处理,因为NSCache会自动处理。更新:从iOS7开始,NSCache不

objective-c - NSCache:尝试访问缓存项时总是得到 "not key value coding-compliant"

我正在尝试使用NSCache将PNG存储为NSData。每当我尝试从缓存中取回一个时,无论缓存是否为空,我都会得到:2012-10-2609:49:28.860SledMap[55917:11503]*由于未捕获的异常“NSUnknownKeyException”而终止应用程序,原因:“[valueForUndefinedKey:]:此类不是key键0_0_5的值编码兼容。'如果我保留代码原样,但将NSCache更改为NSMutableDictionary,它可以正常工作。我声明我的缓存:@property(nonatomic,strong)NSCache*tileCache;分配它(

Objective-c - 在静态 NSMutableDictionary 上使用 NSCache 的好处?

因此NSCache对象应该保持事件状态以保留缓存数据,这意味着必须使用用于存储数据的同一个对象来检索数据。所以问题是在保存我的数据的单例NSDictionary上使用NSCache有什么意义?使用NSCache的首选方法是什么?静态场?继承它并创建一个单例? 最佳答案 缓存有许多怪癖,使其可以很好地用作缓存,但不太适合用作通用集合。如文档中所述:NSCacheobjectsdifferfromothermutablecollectionsinafewways:TheNSCacheclassincorporatesvariousaut

swift - 非对象类型的 NSCache 行为

下面的代码工作得很好,但我很惊讶,因为我认为NSCache需要对象键和值,并且不会采用CGFloat。有人可以向我解释发生了什么吗?classAvarcachedPoints=NSCache()funcrAt(thetatheta:CGFloat)->CGFloat{ifletr=self.cachedPoints.objectForKey(theta)as?CGFloat{returnr}//dosomeveryexpensivemathshere...letr=self.veryExpensiveFunction(theta)self.cachedPoints.setObject(