2012-08-08 70 views
0

我很抱歉如果这个愚蠢的问题但我很新的iOS开发。所以这里是问题:视图没有完全释放

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

下面的代码:

的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 
} 

SecondView:

@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 

这里有一些数字,我从仪器得到(直播字节):

  1. 的firstView加载:671 KB
  2. SecondView加载:3.28 MB
  3. SecondView移除:809 KB

注:仪器显示没有泄漏

不该实时字节成为初始值(671 KB)?而不是809 KB,剩下的是什么?

+0

你为什么不使用弧?如果你这样做,你不必担心发布的东西。 (只设置指针为零,操作系统将负责其余部分) – Pochi 2012-08-08 09:01:46

+0

我刚把项目移植到了arc,仍然有同样的问题。 – user945711 2012-08-08 09:05:52

+1

有什么问题?没有泄漏意味着它是好的。一些内存可能用于缓存,单身等,只要你的程序没有泄漏,并没有因内存不足而崩溃,没有必要弄清楚这个低级别发生了什么 – 2012-08-08 09:29:05

回答

1

这不是泄漏。 Apple缓存一些细节。第一次加载viewcontroller时,会增加内存使用量。一旦你释放它,一些东西将保持缓存。

所以,一读不会给你确切的图片。

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

如果在每个周期增加,则可能会发生内存泄漏。

+0

这是否适用于对象好吧,按钮,标签......? – user945711 2012-08-08 10:41:32

+0

不。如果他们被分配autorelease,那么你将不会立即生效。当autorelease池被销毁时,它会被添加到你的空闲内存中。 – Apurv 2012-08-08 10:44:19

+0

好的谢谢,你已经为我清理了一些东西! – user945711 2012-08-08 11:21:17