gpt4 book ai didi

ios - objective c 以编程方式解除分配/释放对象

转载 作者:行者123 更新时间:2023-11-29 03:09:01 25 4
gpt4 key购买 nike

我正在开发一款 iPhone 游戏,目前该游戏使用许多 UIImageView 来显示 spaceship 、子弹和其他东西。该游戏在 View Controller 中可能有 30-40 个不同的 subview ,我决定我应该在需要时以编程方式添加 subview ,而不是在隐藏状态下开始游戏并在需要时使它们不隐藏(性能问题) ) 所以这是我的问题:

(1) 在需要时添加 subview 会显着提高性能吗?

(2) 启用ARC后如何释放 subview ?我试图在创建时将 View (基于类型)添加到 NSMutableArray 中以保存它,并在我使用完它后将其从数组中删除,是否将其从数组中删除解除分配内存?

代码如下(有一个 NSTimer 每 0.03 秒运行一次移动方法,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:是的,无论 UIImageView 有多大,性能肯定会提高。

问题二:简单的将imageView设置为nil:self.imageView = nil;

关于ios - objective c 以编程方式解除分配/释放对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22432172/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com