所以,我有一些边界(addBoundaryWithIdentifier: ),一个生成 block 的代码(UIView 方 block )每秒使用 performSelector: ,方 block 会掉落,如果与边界发生碰撞,我会移除项目。
现在,如果我将 UILabel 添加到 View 中,内存使用量会慢慢增加到 15Mb,然后停止攀升。
不使用 UILabel 的内存:
与 UILabel 一起使用的内存:
几分钟后使用 UILabel 的内存:
这里发生了什么?如何解决?我应该解决这个问题吗?
这是我正在使用的代码。
@implementation ESViewController {
UIPushBehavior *pushBlock;
UIDynamicAnimator *mainAnimator;
UICollisionBehavior *blockCollision;
}
- (void)viewDidLoad {
[super viewDidLoad];
// UILabel *label = [[UILabel alloc] initWithFrame: CGRectMake(110, 400, 100, 50)];
// [label setText"Hello"];
// [label setTextAlignment: NSTextAlignmentCenter];
// [self.view addSubview: label];
mainAnimator = [[UIDynamicAnimator alloc] initWithReferenceView: self.view];
blockCollision = [[UICollisionBehavior alloc] initWithItems: @[]];
[blockCollision addBoundaryWithIdentifier"bottom"
fromPoint:CGPointMake(0, 480)
toPoint:CGPointMake(320, 480)];
[blockCollision addBoundaryWithIdentifier"left"
fromPoint:CGPointMake(0, 480)
toPoint:CGPointMake(0, 0)];
[blockCollision addBoundaryWithIdentifier"right"
fromPoint:CGPointMake(320, 480)
toPoint:CGPointMake(320, 0)];
[blockCollision addBoundaryWithIdentifier"top"
fromPoint:CGPointMake(0, -40)
toPoint:CGPointMake(320, -40)];
[blockCollision setCollisionDelegate: (id<UICollisionBehaviorDelegate>)self];
[mainAnimator addBehavior: blockCollision];
pushBlock = [[UIPushBehavior alloc] initWithItems: @[] mode: UIPushBehaviorModeContinuous];
[pushBlock setAngle: M_PI/2 magnitude:0.05];
[mainAnimator addBehavior: pushBlock];
[self movingBlocks];
}
- (void) movingBlocks {
UIView *block = [[UIView alloc] initWithFrame:CGRectMake(arc4random() % 320, -20, 20, 20)];
[block setBackgroundColor: [UIColor brownColor]];
[self.view addSubview: block];
[blockCollision addItem: block];
[pushBlock addItem: block];
[self performSelectorselector(movingBlocks) withObject:nil afterDelay:0.05];
}
- (void)collisionBehaviorUICollisionBehavior *)behavior
beganContactForItemid<UIDynamicItem>)item
withBoundaryIdentifierid<NSCopying>)identifier
atPointCGPoint)p {
[pushBlock removeItem:item];
[blockCollision removeItem:item];
[(UIView*)item removeFromSuperview];
}
@end
Best Answer-推荐答案 strong>
我已经重现了您所描述的症状,但我认为 Xcode 在对您撒谎,您应该打开雷达 (bugreport.apple.com)。
如果您在 Instruments 中运行它,内存使用情况将完全符合您的预期。我已经尝试在 Release模式下使用 Xcode 配置文件(就像 Instruments 一样),并且我已经在所有 iPad 模拟器上运行。该症状在 Xcode 中非常可重现,而 Instruments 显示了预期的结果并且非常稳定。我什至将一个在 Xcode 中显示增长的正在运行的进程转移到 Instruments 中,但 Instruments 仍然没有增长。我会说 Xcode 在这里被破坏了。
关于ios - 为什么 UILabel 会增加内存使用量?,我们在Stack Overflow上找到一个类似的问题:
https://stackoverflow.com/questions/23809048/
|