【问题标题】:Iphone: Where allocate memory for dataSource?Iphone:在哪里为数据源分配内存?
【发布时间】:2011-06-07 05:43:30
【问题描述】:

我有一个用于填充 UITableView 的数组。

问题是我应该在哪里为它分配内存。我在 viewDidLoad 或 viewWillAppear 中有两个选项,但我不知道从内存管理的角度来看哪里更有效。

谢谢

编辑:

我创建视图执行以下操作:

NextViewController *nextController = [[ReservationsViewController alloc] initWithNibName:@"NextViewController" bundle:nil];
nextController.managedObjectContext = self.managedObjectContext;
[self.navigationController pushViewController:nextController animated:YES];
[nextController release];

但我不想在每次显示时分配内存,只有在第一次加载视图时才能从内存管理的角度正确。

【问题讨论】:

  • 在哪里分配数组?它是财产吗?

标签: iphone memory-management


【解决方案1】:

如果您只想分配一次,那么您应该在 init 方法或 awakeFromNib 中分配它,具体取决于您的视图控制器的创建方式。

viewWillAppear 可能会被多次调用,并且不能保证 viewDidLoad 只会被调用一次。

【讨论】:

  • 我编辑我的问题。如果我在 viewwillAppear 或 viewDidLoad 中分配,我不想泄漏内存。那么正确的方法是什么?
  • 重写 initWithNibName 方法并把它放在那里。
【解决方案2】:

如果数组是一个属性,只需像这样在 dealloc 中释放它:

- (void)dealloc {
  [someArray release];
  [super dealloc];
}

如果由于某种原因您切换到在 viewDidLoad 或 viewWillAppear 方法中创建本地数组,请确保在完成后立即释放它。

【讨论】:

    【解决方案3】:

    如果您在viewDidLoad 方法中分配内存,它只会在视图加载到内存时完成。如果您在viewWillAppear 中执行此操作,您将在每次视图可见时执行此操作。

    【讨论】:

    • 但是 viewDidLoad 不能保证只被调用一次,不是吗?
    • 这取决于您管理视图的方式。如文档所述,每次将其加载到内存时都会调用它。如果您的应用生命周期中只有一个视图实例,并且您推送/弹出这个唯一实例,那么它只会被调用一次。
    猜你喜欢
    • 2017-02-28
    • 2016-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-06
    • 2016-02-07
    • 2013-07-14
    相关资源
    最近更新 更多