Ich habe ein ios/swift-Projekt, in dem ich viele UIImageViews in einem Scrollview platziere. Ich habe mehrere scrollviews und ich möchte sicherstellen, dass alle Speicher freigegeben wird, wenn ich einen schließe. Bisher scheint es, als ob ich ein UIImage hinzufügen würde, es erhält 16 Referenzen mit dem folgenden Code. Wenn ich es auf einem Gerät ausfühle, hat es nicht genügend Arbeitsspeicher und stürzt ab.swift: ARC: wie man alle Verweise auf ein UII-Objekt freigibt
import UIKit
class ViewController: UIViewController
{
var scrollView: UIScrollView?
var backgroundView:UIImageView?
var background:UIImage?
override func viewDidLoad()
{
super.viewDidLoad()
for i in 1 ..< 10000
{
print(i)
scrollView = UIScrollView(frame: CGRect(x: 0, y: 0, width: 1000, height: 1000))
view.addSubview(scrollView!)
if let backgroundPath = NSBundle.mainBundle().pathForResource("1", ofType: "jpg")
{
background = UIImage(contentsOfFile: backgroundPath)!
}
backgroundView = UIImageView(image: background)
backgroundView?.frame = CGRect(x: 100, y: 500, width: 500, height: 500)
scrollView?.addSubview(backgroundView!)
print(CFGetRetainCount(background!))
print(CFGetRetainCount(backgroundView!))
print(CFGetRetainCount(scrollView!))
scrollView!.contentSize = CGSize(width: 500, height: view.frame.height)
backgroundView = nil
scrollView = nil
background = nil
}
}
}
Wie bekomme ich einen Referenzzähler von Null, um den Speicher freizugeben? Vielen Dank!
ich meine 16 Referenzen pro UIImage. Ich hatte den Eindruck, dass das Setzen von UIImageView, Scrollview und UIImage auf null ihre Referenzen löschte, aber das scheint nicht zu passieren. Ich werde versuchen, sie vollständig aus der Ansicht zu entfernen. – timfi
Wenn Sie diese Werte auf "nil" setzen, entfernen Sie Ihre starken Verweise darauf. Wenn Sie jedoch "addSubview" aufgerufen haben, haben Sie sie zur Ansichtshierarchie hinzugefügt, die ihre eigenen starken Referenzen enthält. Sie müssen 'removeFromSuperview' entfernen, um es aus der Ansichtshierarchie zu entfernen und die letzten verbleibenden starken Referenzen aufzulösen. – Rob
danke, es dauerte eine Weile, um in meinem eigentlichen Projekt zu implementieren, aber meine Probleme sind vorbei! Gewicht meiner Schultern, enge Frist :) – timfi