0

如果这是一个愚蠢的问题,我深表歉意,但我对 iOS 开发非常陌生。所以这是一个问题:

当我添加SecondView到 时FirstView,分配了内存,但是当我删除它时,并非所有分配的内存都被释放。

这是代码:

第一视图:

@interface FirstView : UIViewController
@property (nonatomic, retain) SecondView *secondView;
- (IBAction)loadSecondView;
@end

@implementation ViewController
@synthesize editView;
- (IBAction)loadSecondView{
    secondView = [[SecondView alloc]init];
    [self presentModalViewController:editView animated:YES];
}
- (void)viewWillAppear:(BOOL)animated{
    [secondView release]; secondView = nil; //this is called after SecondView is removed
}

第二视图:

@interface SecondView : UIViewController
@end

@implementation EditView
-(void)viewDidLoad{
    for (int intCounter = 0; intCounter < 10000; intCounter++){
        UIImageView *image = [[UIImageView alloc]init]; //create 10000 images just to fill up the memory
        [self.view addSubview:image];

        [image release]; image = nil;
    }
}
@end

以下是我从 Instruments (Live Bytes) 获得的一些数字:

  1. 已加载的 FirstView:671 KB
  2. 加载的第二视图:3.28 MB
  3. 已删除 SecondView:809 KB

注意:仪器显示没有泄漏

Live 字节不应该成为初始值(671 KB)吗?剩下的不是 809 KB,还有什么?

4

1 回答 1

1

这不是泄漏。苹果缓存了一些细节。第一次加载视图控制器时,它会增加内存使用量。一旦你释放它,一些东西将保持缓存。

所以,第一次阅读不会给你确切的画面。

进行相同的练习2-3次。因此,您应该能够在第 3 次迭代开始和第 3 次迭代结束时拥有相同的内存利用率。

如果它在每个周期都增加,那么可能存在内存泄漏的情况。

于 2012-08-08T09:37:22.537 回答