内存管理,需要发布吗?

时间:2010-12-09 17:53:41

标签: iphone objective-c cocoa-touch

我想知道是否有人可以快速帮我解决以下问题,是否需要添加[myTableView版本];在我调用[view addSubview:[self myTableView]]之后; ?最初我没有想到,并通过CLANG运行它来生成内存警告

这是我的想法:

  • [self setMyTableView:tempTableView]; retainCount =(+1)
  • [查看addSubview:[self myTableView]]; retainCount =(+ 2)
  • // [myTableView release]; << HERE retainCount =(+1)
  • -dealloc [myTableView release]; retainCount =(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];
}

编辑: 嗯,也许我不像[查看addSubview:[self myTableView]];保留它并在完成时释放。你的卡尔,我的坏人。我对以下内容感到困惑:分配,设置,发布,这只是取得所有权的视图(以及稍后发布的责任)

2 个答案:

答案 0 :(得分:2)

您的方法不会retain myTableView,因此它不应release

答案 1 :(得分:2)

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