我有一個UIImageView的子類,它定期刷新自己以適應不同的圖像。我用下面的代碼沒有任何問題:[UIViewAnimationState animationDidStop:finished:]:發送到釋放實例的消息
UIImage *cachedImage = [[SDImageCache sharedImageCache] imageFromKey:blobKey];
if(cachedImage==nil) {
NSData *imageData=[NSData dataWithContentsOfURL:url];
cachedImage = [UIImage imageWithData:imageData];
[[SDImageCache sharedImageCache] storeImage:cachedImage imageData:imageData forKey:blobKey toDisk:YES];
}
self.image=cachedImage;
CATransition *transition = [CATransition animation];
transition.duration = 2.0f;
transition.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
transition.type = kCATransitionFade;
[self.layer addAnimation:transition forKey:nil];
問題是,當我決定使用,而不是上面的代碼,「塊」風格的動畫作爲蘋果提出針對iOS 4.0+:
[UIView transitionWithView:self duration:2.0 options:UIViewAnimationOptionTransitionCrossDissolve animations:^{
self.image=cachedImage;
} completion:^(BOOL finished) {
// do something..
}];
我應用了新代碼後,收到錯誤消息:「發送到釋放實例的消息」。 (我已經啓用了iOS 5.1 SDK和ARC。)我應該學習塊編程的任何方面嗎?
我試圖添加一個額外的持有人屬性,正如你所建議的,通過在塊執行前調用'self.retainedImage = cachedImage'。但是我仍然得到這樣的消息: - [UIViewAnimationState retain]:發送到釋放實例的消息。 (我添加了更多關於如何在原始文章中創建cachedImage的代碼。) – 2012-03-20 02:25:24