skip to Main Content

I haven’t thought about it much until today. Basically I’m in a situation in which I have the same UIImage appear multiple times in my ViewControllers, and I’m not sure what the impact is.

class MyObjectA{
    private(set) var myName: String
    var myImage: UIImage? { UIImage(named: myName) }  //as computed property
}

class MyObjectB{
    private(set) var myName: String
    private(set) var myImage: UIImage?  //as stored property

    init(myName: String){
        self.myName = myName
        self.myImage = UIImage(named: myName)
    }
}

Consider a TableView, where each cell corresponds to an object. Is it bad having an image constantly being instantiated with myimageview.image = UIImage(named: myobject.imagename) versus just instantiating once and referencing it with myimageview.image = myobect.image ? Or does Swift do some super magic where it optimizes it under the hood, knowing that image was already loaded once?

2

Answers


  1. iOS has an UIImage cache, so calling UIImage(named: myobject.imagename) multiple times for the same image is perfectly fine.

    The documentation says

    Use the init(named:in:compatibleWith:) method (or the init(named:)
    method) to create an image from an image asset or image file located
    in your app’s main bundle (or some other known bundle). Because these
    methods cache the image data automatically, they’re especially
    recommended for images that you use frequently.

    Login or Signup to reply.
  2. The idea behind using a computed property or a stored one is when the value of the property being changed or not with time ,so given ex.1

    class MyObjectA{
        private(set) var myName: String
        var myImage: UIImage? { UIImage(named: myName) }  //as computed property
    

    So if myName changes with time then you need to make myImage a computed property to always get the latest updated image , but if myName is being set only once then you need to make it a stored property

    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search