当前位置:  开发笔记 > IOS > 正文

当我动画UIView时,内存过度释放问题

如何解决《当我动画UIView时,内存过度释放问题》经验,为你挑选了2个好方法。

我启用了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;
}

我有时候并不会总是崩溃.我想知道什么是发布的?



1> Adam Eberbac..:

你有一个自动释放池,提示我问,这是一个单独的线程吗?如果答案是肯定的那么你就不能在那里做UIView.UIKit不是线程安全的.您可以执行其他操作,例如计算位置或更新您稍后放在屏幕上的图像,但任何用户界面都必须在主线程中进行.

iPhone应用程序编程指南的图形和绘图部分



2> Lukasz..:

您可以使用非常简单的安全检查功能,所有功能都可以通过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;
    }

}

推荐阅读
TXCWB_523
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有