UIImage *img = [[UIImage alloc] initWithContentsOfFile:@"xx.jpg"]
UIImage *img = [UIImage imageNamed:@"xx.jpg"]
W drugim typie obraz zostanie zbuforowany?
Podczas gdy w pierwszym typie obrazy nie są buforowane?
Odpowiedzi:
28 dla odpowiedzi № 1The
-initWithContentsOfFile:
tworzy nowy obraz bez buforowania, jest to zwykła metoda inicjalizacji.The
+imageNamed:
metoda wykorzystuje pamięć podręczną. Oto dokumentacja z Dokumentacja UIImage:Ta metoda szuka w pamięci podręcznej systemu plikuobiekt obrazu o określonej nazwie i zwraca ten obiekt, jeśli istnieje. Jeśli pasującego obiektu obrazu nie ma jeszcze w pamięci podręcznej, ta metoda ładuje dane obrazu z określonego pliku, buforuje go, a następnie zwraca wynikowy obiekt.
UIImage zachowa załadowany obraz, utrzymując go przy życiu, dopóki stan niskiej pamięci nie spowoduje wyczyszczenia pamięci podręcznej.
Aktualizacja dla Swift:
W Swift the UIImage(named: "...")
funkcja jest tą, która buforuje obraz.
9 dla odpowiedzi nr 2
Chciałem tylko zostawić to tutaj, aby pomóc w rozwiązaniu problemu z nazwami ścieżek. Jest to metoda, którą możesz zastosować UIImage
Kategoria.
+(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;
}
Jeśli nie masz łatwego sposobu na przejście do pamięci podręcznej, możesz po prostu użyć `imageNamed. W większości przypadków jest to duży błąd. Zobacz ta świetna odpowiedź na więcej szczegółów (i głosuj zarówno na pytanie, jak i odpowiedź!).
1 dla odpowiedzi nr 3
@Dan Rosenstark szybko odpowiedzieć
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 dla odpowiedzi nr 4
Prawidłowo, drugi element jest buforowany.