ios - didReceiveMemoryWarning 方法中应该释放什么东西?

标签 ios objective-c didreceivememorywarning

我所做的是在这个方法中从 View 中释放任何东西,但我的直觉告诉我我可能做错了。

在大多数情况下,didReceiveMemoryWarning应该杀掉什么样的资源?

最佳答案

您可以在这里发布任何您可以轻松重新创建的内容。

  • 从商店构建或序列化的数据结构。
  • 使用过的输入数据(如果您已缓存)
  • 如果您缓存了来自网络的数据。

iOS 软件中的一个常见习惯用法是使用惰性初始化。

使用 lazy init 时,您不会在 init 方法中初始化 ivars,而是在检查它是否已经存在后在 getter 中进行初始化:

@interface ViewController ()
@property (strong,readonly)NSString *testData;
@end

@implementation ViewController

@synthesize testData=_testData;

// Override the default getter for testData
-(NSString*)testData
{
    if(nil==_testData)
        _testData=[self createSomeData];
    return _testData;
}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];

    _testData=nil;
}

在这种情况下,testData 的内存在第一次使用时被初始化,在 didReceiveMemoryWarning 中被丢弃,然后在下次需要时安全地重新创建。

关于ios - didReceiveMemoryWarning 方法中应该释放什么东西?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24054366/

相关文章:

ios - 如何在 iOS App Extension 中检测内存警告

ios - 在iOS中将react-native-navigation与react-native-callkit集成

ios - MPMoviePlayerViewController |允许横向模式

ios - 将焦点转移到下一个文本字段

ios - 如何使用我的 iOS 应用程序在我的 iPad/iPhone 中打开 PDF 文件?

ios - 我的 AVPlayer 的内存在哪里,我该如何取回它?

iOS 处理内存警告

objective-c - 比较浮点值有多危险?

ios - 运行时控制台中的核心数据信息和错误

ios - 如果我有两种不同类型的单元格,我该如何使用 FetchedResultsController?