objective c以编程方式释放/释放对象

时间:2014-03-16 02:10:54

标签: ios iphone objective-c

我正在制作iPhone游戏,目前游戏使用许多UIImageViews来展示太空飞船,子弹和其他东西。游戏可能在视图控制器中有30-40个不同的子视图,我决定在需要时我可能以编程方式添加子视图,而不是在隐藏状态下使用它们开始游戏并在需要时将它们取消隐藏(对于性能问题)所以这是我的问题:

(1)在需要时添加子视图会有显着的性能提升吗?

(2)如何在启用ARC时发布子视图?我试图将视图(基于类型)添加到NSMutableArray中,当它被创建以保存它时,并在我完成使用它时将其从数组中删除,确实将它从数组中删除,释放该内存?

继承代码(每隔0.03秒运行一次运动方法的NSTimer,并且get和set方法位于"实例变量" NSMutableArray);

-(void)movement {
    if (shootButton3.isHighlighted) {
        NSMutableArray *array = [self getBulletArray];
        [self setarray:array];
    }
    [self shootBullet: [self getArray]];
}

-(NSMutableArray *)getBulletArray {
    UIImageView *bullet = [[UIImageView alloc] initWithFrame:CGRectMake(ship.center.x + 20, ship.center.y, 15, 3)];
    bullet.image = [UIImage imageNamed:@"bullet2.png"];
    bullet.hidden = NO;
    [self.view addSubview:bullet];
    NSMutableArray *array = [[NSMutableArray alloc] init];
    [array addObject:bullet];
    return array;
}
-(void)shootBullet: (NSMutableArray *)bulletArray {

    for (int i = 0; i < [bulletArray count]; i++) {
        UIImageView *bullet = [bulletArray firstObject];
        bullet.center = CGPointMake(bullet.center.x + 4, bullet.center.y);
        if (bullet.center.x > 500) {
            bullet.hidden = YES;
            [bulletArray removeObjectAtIndex:0];
        }

    }
}
-(void)setarray:(NSMutableArray *) array {
    bulletArray = array;
}
-(NSMutableArray *)getArray {
    return bulletArray;
}

1 个答案:

答案 0 :(得分:1)

回答你的两个问题:

问题1:是的,无论UIImageViews有多大,肯定会有性能提升。

问题2:只需将imageView设置为nil:self.imageView = nil;