2015-11-26 62 views
0
func generateMemedImage() -> UIImage { 

    let memeImage = imageView.image! 
    let newImageViewOriginAndDimension = self.view.frame 
    let originalImageViewOriginAndDimension = imageView.frame 
    rescaleImageView(newImageViewOriginAndDimension, image: memeImage) 
    print(imageView.frame) // has fatal error unexpectedly found nil 
    // other unrelated lines of code 
} 
func rescaleImageView(originAndDimension: CGRect, image : UIImage) { 
    let newImageView : UIImageView = UIImageView(frame: originAndDimension) 
    newImageView.image = image 
    imageView = newImageView 
    print(imageView.frame) // prints fine 
} 

所以我有兩個功能上面爲什麼我能夠運行在功能rescaleImageView,但不是在generateMemedImage函數執行print(imageView.frame)沒有錯誤可以有人向我解釋?致命錯誤:意外發現零

我是正確的假設,當我創建我的generateMemedImage功能newImageView我沒有實際分配班裏imageView變量newImageView而只是重新分配指針本地在我的功能?

+1

'imageView'屬性是如何聲明的?這是「弱」還是「無主」? – Adam

+0

是啊,它很弱,哦,對,因爲當我重新分配它的時候,參考時間會釋放指向它的指針? – YellowPillow

回答

1

您分配一個新創建的newImageViewweak屬性。這就是爲什麼它在第一個方法範圍內不存在。它被簡單地釋放。它在第二種方法中工作,因爲該對象由newImageView常量保留。你不是將新視圖添加到超視圖中,因此它不會被保留(也不會刪除舊視圖)。但創建一個新的UIImageView在你的情況下沒有意義。你所要做的就是將你的圖像分配給現有的視圖。如下所示:

func rescaleImageView(originAndDimension: CGRect, image : UIImage) { 
    imageView.image = image 
    imageView.frame = originAndDimension 
} 
相關問題