在下面的代码中,我对“自我”实际上指的是什么感到困惑。
let imageURL = URL(string : “http://exampleURLh.jpg”)!
let task=imageDataURLSession.sharedSession().dataTaskWithURL(imageURL, {(data, response, error) in
print (“task finished”)
}
task.resume()
if error == nil {
let downloadedImage = UIImage(data: data!)
self.imageView.image = downloadedImage
}
我知道我正在使用其image属性将downloadedImage设置为imageView,但我不确定为什么需要self以及在这种情况下它持有什么数据。我知道它指的是正在处理的viewController类的实例,但该实例是UIImage、downloadedImage还是示例URL中图像中的资源数据?
因为类继承,光看代码不可能知道self
指的是什么。这完全取决于self
在运行时是什么。
self
表示消息最初发送到的实际实例,但您甚至没有显示包装此代码的方法,因此甚至没有足够的信息来猜测。
如果您在某些特定场合对self
是什么有疑问,请记录它(使用NSLog
或print
)。
当您调用对象的(非静态/类)函数时,您可以这样调用它:
obj.function()
在function()
内部,self
引用它被调用的对象(在这种情况下是obj
)。self
就像一个自动变量,你可以方便地引用函数调用的目标。
在你的例子中,很明显这段代码来自某种ViewController。VC有一个imageView属性,表示(可能)VC中的UIImageView
。我猜你的代码在一个函数中,这个函数要么被viewDyLoad
调用(或类似),要么可能是按钮点击的目标。
调用这些函数时,self
将引用调用该函数的ViewController对象。