didReceiveMemoryWarning

didReceiveMemoryWarning

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

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

最佳答案

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

  • 从商店构建或序列化的数据结构。
  • 如果已将其缓存,则使用已输入的数据
  • 来自网络的数据,如果你已经缓存了它。

  • iOS软件中常见的习惯用法是使用延迟初始化。

    使用惰性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中,然后在下次需要时安全地重新创建它。

    10-08 09:23