Iphone 设置UIView动画时内存过度释放问题

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

我已启用NSZombie,在运行应用程序时,我在控制台中收到以下消息:

 *** -[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或其他具有委托模式的类呢?