【问题标题】:Memory management, release needed?内存管理,需要释放吗?
【发布时间】:2010-12-09 17:53:41
【问题描述】:

我想知道是否有人可以快速帮助我完成以下操作,我是否需要添加 [myTableView 版本];在我调用 [view addSubview:[self myTableView]] 之后; ?最初我想不,通过 CLANG 运行它会产生内存警告

这是我的想法:

  • [自我 setMyTableView:tempTableView];保留计数 = (+1)
  • [查看 addSubview:[self myTableView]];保留计数 = (+2)
  • //[myTableView 发布];
  • -dealloc [myTableView 发布];保留计数 = ( 0)

.

@property (nonatomic, retain) UITableView *myTableView;

.

- (void)loadView {
    NSLog(@"%s", __PRETTY_FUNCTION__);

    [self setTitle:@"Location Data"];
    CGRect viewFrame = CGRectMake(0, 20, 320, 460);
    UIView *view = [[UIView alloc] initWithFrame:viewFrame];

    CGRect tableFrame = CGRectMake(0, 0, 320, 416);
    UITableView *tempTableView = [[UITableView alloc] initWithFrame:tableFrame];
    [self setMyTableView:tempTableView];
    [tempTableView release];

    [view addSubview:[self myTableView]];
    //[myTableView release]; << HERE

    [[self myTableView] setDelegate:self];
    [[self myTableView] setDataSource:self];

    [self setView:view];
    [view release];
}

.

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

编辑: 嗯,也许我不像 [view addSubview:[self myTableView]];保留它并在完成后释放。你的权利卡尔,我的错。我对分配、设置、释放感到困惑,而这只是视图获得所有权(以及稍后发布的责任)

【问题讨论】:

    标签: iphone objective-c cocoa-touch


    【解决方案1】:

    当您说[view addSubview:[self myTableView]]; 将保留您的表格视图时,您是对的,但由于是 view 保留它,所以应该是 view 释放它。它会,当视图被释放时。您只需释放您自己保留的内容,即您只需在您的 dealloc 方法中释放一次表格视图。

    【讨论】:

    • 谢谢你 filipe,你和 Carl 都在现场,我将把你的文章标记为已接受,因为你解释了一些正在发生的事情,非常感谢 ...
    【解决方案2】:

    你的方法不retainmyTableView,所以它不应该release它。

    【讨论】:

    • 我同意卡尔的观点。视图在 [self myTableView] 上进行保留(“我的想法”的第二个项目符号),但视图将在它被释放时释放。
    • 谢谢卡尔,非常感谢。
    猜你喜欢
    • 2014-02-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-11
    • 2012-04-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多