内存管理,UIScrollView每页包含24个UIButtons和UILabels。我怎样才能提高效率呢?

时间:2015-02-10 12:32:41

标签: ios xcode uiview uiscrollview

我正在构建一个使用按钮代表每个用户的应用。有点像聊天头。这些按行排列在UIScrollView中。每行4 buttons,按钮下方显示用户名的UILabel。这些buttons都与它们的图像一起存储在NSMutable数组中。每张图片的大小约为50kb。在大约100 UIButtons之后,它开始有点滞后滚动(在iPhone 5上运行)。初始化按钮的代码如下,图像从Parse.com获取:

-(void)initButtonsFromFriendsArray: (NSMutableArray *)friends {


    for(int i=0; i<[self.currentUser.friends count]; i++) {

        //need someway to reference the buttons
        UIButton *button = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 70, 70)];
        //tag is the same as the element in the array
        button.tag=i;
        [button addTarget:self action:@selector(friendTapped:) forControlEvents:UIControlEventTouchUpInside];


        [self.buttons addObject:button];
        PFUser *user = friends[i];
        PFFile *userImageFile = user[@"profilePic"];
        [userImageFile getDataInBackgroundWithBlock:^(NSData *imageData, NSError *error) {
            if (!error) {
                UIImage *image = [UIImage imageWithData:imageData];
                [button setBackgroundImage:image forState:UIControlStateNormal];

            }
        }];

    }

    //after init want to display

    [self refreshButtons];

}

方法refreshButtons只是迭代通过该数组将它们放在内容UIView(包含在UIScrollView中)中,将它们排成4行。无论如何我在内存管理方面都很有效率?阵列是否会占用大量内存空间,而图像存储在屏幕内,还是屏幕上的UIViews?不确定如何优化它。我无法继续从服务器重新加载图像,因为它很慢,因此需要将它们存储在该阵列中。任何建议将不胜感激!

0 个答案:

没有答案