Iphone 设置UIView动画时内存过度释放问题
我已启用NSZombie,在运行应用程序时,我在控制台中收到以下消息:Iphone 设置UIView动画时内存过度释放问题,iphone,objective-c,cocoa-touch,ipad,exc-bad-access,Iphone,Objective C,Cocoa Touch,Ipad,Exc Bad Access,我已启用NSZombie,在运行应用程序时,我在控制台中收到以下消息: *** -[UIViewAnimationState release]: message sent to deallocated instance 0xf96d7e0 下面是执行动画的方法 -(void)loadAvatar:(STObject*)st { NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; avatar
*** -[UIViewAnimationState release]: message sent to deallocated instance 0xf96d7e0
下面是执行动画的方法
-(void)loadAvatar:(STObject*)st
{
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
avatar.alpha = 0;
avatar.frame = avatarRectSmall;
avatar.image = [ImageCache getMemoryCachedImageAtUrl:st.avatar_url];
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:.50];
avatar.frame = avatarRectNormal;
[avatar setAlpha:1];
[UIView commitAnimations];
[pool release];
pool = nil;
}
我不总是撞车,只是有时候。我想知道发布的是什么?您有一个自动释放池,它会提示我问,这是一个单独的线程吗?如果答案是肯定的,那么你就不能在那里查看。UIKit不是线程安全的。你可以做其他的事情,比如计算位置或者更新图像,然后把它们放在屏幕上,但是任何用户界面的事情都必须发生在主线程中
您可以使用非常简单的安全检查来检查所有使用UI执行操作的功能:
-(void)functionModifyingUIelements:(id)object
{
// fire itself in main thread if it is not in it already
if (![[NSThread currentThread] isMainThread]) {
[self performSelectorOnMainThread:@selector(functionModifyingUIelements:) withObject:object waitUntilDone:NO];
return;
}
}
回溯只能让我回到main。之后的任何操作都是程序集。请尝试设置一些断点。您是正确的,这是一个单独的线程。我只想从UIImageView中的URL加载图像。如果我删除动画代码,它有时只会加载图像。您是否特别需要一个单独的线程来从URL加载图像?为什么不使用异步NSURLConnection或其他具有委托模式的类呢?