/ / A imagem do UIImage Cache? - objetivo-c, ios, cache, uiimage

A imagem do UIImage Cache? - objetivo-c, ios, cache, uiimage

UIImage *img = [[UIImage alloc] initWithContentsOfFile:@"xx.jpg"]
UIImage *img = [UIImage imageNamed:@"xx.jpg"]

No segundo tipo, a imagem será armazenada em cache?
Considerando que no primeiro tipo as imagens não são armazenadas em cache?

Respostas:

28 para resposta № 1
  • o -initWithContentsOfFile: cria uma nova imagem sem cache, é um método de inicialização comum.

  • o +imageNamed: método usa cache. Aqui está uma documentação de Referência UIImage:

    Este método procura nos caches do sistema por umobjeto de imagem com o nome especificado e retorna esse objeto se ele existir. Se um objeto de imagem correspondente ainda não estiver no cache, esse método carregará os dados da imagem do arquivo especificado, armazenará em cache e, em seguida, retornará o objeto resultante.

    O UIImage manterá a imagem carregada, mantendo-a ativa até que a condição de pouca memória faça com que o cache seja removido.

Atualização para o Swift: Em Swift o UIImage(named: "...") função é aquela que armazena a imagem em cache.


9 para resposta № 2

Só queria deixar isso aqui para ajudar a lidar com o problema dos nomes de caminho. Este é um método que você pode colocar em um UIImage categoria.

+(UIImage *)imageNamed:(NSString *)name cache:(BOOL)cache {
if (cache)
return [UIImage imageNamed:name];
name = [[NSBundle mainBundle] pathForResource:[name stringByDeletingPathExtension] ofType:[name pathExtension]];
UIImage *retVal = [[UIImage  alloc] initWithContentsOfFile:name];
return retVal;
}

Se você não tem uma maneira fácil de mudar para o cache, pode acabar usando apenas o imageNamed. Isso é um grande erro na maioria dos casos. esta ótima resposta para mais detalhes (e invista tanto a pergunta quanto a resposta!).


1 para resposta № 3

@Dan Rosenstark responder de forma rápida ..

extension UIImage {

static func imageNamed(name: String, cache: Bool) -> UIImage? {
if (cache) {
return UIImage(named: name)
}

// Using NSString for stringByDeletingPathExtension
let fullName = NSString(string: name)
let fileName = fullName.stringByDeletingPathExtension
let ext = fullName.pathExtension
let resourcePath = NSBundle.mainBundle().pathForResource(fileName, ofType: ext)

if let path = resourcePath {
return UIImage(contentsOfFile: path)
}
return nil
}
}

0 para a resposta № 4

Correto, o segundo item é armazenado em cache.