我正在阅读教程书。当我看到一个例子时,我感到有些困惑。
以下代码显示了延迟加载的方法。实例取消分配后,是否会释放此动机数组?否则它将占用此内存块,直到应用程序终止。

+ (NSArray *)motivations
{
    static NSArray *motivations = nil;
    if (!motivations)
    {
        motivations = [[NSArray alloc] initWithObjects:@"Greed",@"Revenge",@"Bloodlust",@"Nihilism",@"Insanity",nil];

    }
    return motivations;
}




编辑1
   感谢Georg的错误。

最佳答案

因为它是静态对象,所以系统将存储对象指针,直到应用程序终止。通过让指针指向不是releaseautorelease的对象,可以使用这种方式进行缓存。

我建议您在确实要在内存中缓存一些数据(通常是小图像数据或大图像数据)时使用此方法,而这需要大量的CPU或IO处理时间才能生成。对于像NSString这样的小数据,您可以创建新数组并在需要时返回。

编辑评论:
关于imageNamed:有两件事

1 /您无法控制imageNamed:缓存的内容和未缓存的内容。例如,您可能不希望缓存大尺寸且仅使用一次的图像。

2 / imageNamed:不能用于从网络或系统中的文件夹获取图像。它只会从您的捆绑包中加载

10-06 15:16