开发者

Memory over-release problem when I am animating UIView

开发者 https://www.devze.com 2022-12-28 15:46 出处:网络
I have enabled NSZombie\'s and I am getting the following message in my console when I am running my application:

I have enabled NSZombie's and I am getting the following message in my console when I am running my application:

 *** -[UIViewAnimationState release]: message sent to deallocated instance 0xf96d7e0

Here is the method that is performing the animation

-(void)loadAvatar:(STObject*)st
{   
    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];    

    avatar.alpha = 0;
    avatar.frame = avatarRectSmall;

    avatar.image = [ImageCache getMemoryCachedImageAt开发者_开发百科Url:st.avatar_url];

    [UIView beginAnimations:nil context:nil];
    [UIView setAnimationDuration:.50];

    avatar.frame = avatarRectNormal;
    [avatar setAlpha:1];
    [UIView commitAnimations];


    [pool release];
    pool = nil;
}

I don't always get a crash, only sometimes. I'm wondering what is getting released?


You have an autorelease pool there which prompts me to ask, is this a separate thread? If the answer is yes then you can't do stuff to UIView there. UIKit is not thread safe. You can do other things like calculating positions or updating images which you later put on the screen but any user interface stuff has to happen in the main thread.

Graphics and Drawing section of iPhone Application Programming Guide


You can use very simple security check fof all functions doing something with 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;
    }

}
0

精彩评论

暂无评论...
验证码 换一张
取 消