【问题标题】:Memory increase with TableView使用 TableView 增加内存
【发布时间】:2011-10-19 09:56:13
【问题描述】:

首先为我的英语道歉。 我有一个问题需要几天的时间给我带来问题。 在同一个视图中,我有两个表格视图,当您从 tableview1 中选择一个选项时,它们会显示 tableview2 中的项目。 文章显示正确,但问题是通过使用选项 Allocations 分析显示内存增加,即选择 tableview1 并加载内存中的对象 tableview2 并增长,按其他选择项正确显示我以前的文章但没有释放内存并在新项目时增加。

另外,我有一个不透明度为 20% 的标签,每次在 tableview1 中选择一个类别时,标签的不透明度增加 20%,就好像它们重叠了一样。

TableViewController1 -- ListaCategoriasViewController.m

TableViewController2 -- ListaArticulosViewController.m

【问题讨论】:

    标签: objective-c ipad uitableview memory


    【解决方案1】:

    我可以看到一个问题:您使用 stringWithFormat 进行了一些字符串分配,该字符串是一个自动释放的字符串,但要使其正常工作,您必须使用自动释放池。

    这是我在 ListaArticulosViewController.m 中注意到的一个问题

    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
    

    你必须保护你的代码在你使用自动释放对象和自​​动释放池的地方:

     NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init;
     ...  your code  ...
     [pool drain];
    

    在您的 cellForRowAtIndexPath 中。

    在同一区域,我可以看到您分配了一些图像 (UIImage),但您从未释放它们。

    【讨论】:

    • 谢谢,我只找到了一张我还没有发布的 UIImage。我会试试你的答案:D
    • 很可能您还有其他一些代码部分需要检查问题。这只是我很快想到的。
    • 其他一些问题:在 viewDidLoad 中,您分配了一些 NSMutableArray 但您从未解除分配它们。每次加载视图时都会调用 viewDidLoad,因此这将导致内存泄漏
    • 我会将这个数组分配从 viewDidLoad 移动到 init 方法。如果有另一个对象保持对您的视图的引用,您最终将多次分配此数组而不解除分配它们(即使您将解除分配放在 dealloc 中)。
    • 我快疯了,我检查了一下,我想我释放了所有对象并按照我说的做,但仍然没有工作。如果你能看一下,我会离开我的项目。 dl.dropbox.com/u/17758189/cosmetica.zip
    猜你喜欢
    • 2023-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-16
    • 2012-01-24
    • 1970-01-01
    • 2015-03-14
    • 1970-01-01
    相关资源
    最近更新 更多