Выпустит ли UIView свои подпредставления в Cocoa Touch? - PullRequest
0 голосов
/ 09 декабря 2010

Если я создаю UIControl во время выполнения и добавляю его в представление (через addSubview :), выпустит ли представление его или я должен это сделать?

Вот пример кода:

-(IBAction) cloneMe: (id) sender{

    if (!currentY) {
        currentY = [sender frame].origin.y;
    }

    UIButton *clone = [UIButton buttonWithType:UIButtonTypeRoundedRect];
    CGRect cloneFrame = [sender frame];
    cloneFrame.origin.y += currentY + cloneFrame.size.height + 30;
    clone.frame = cloneFrame;
    [clone setTitle:@"I'm a clone" forState:UIControlStateNormal];

    [[sender superview] addSubview:clone];

    currentY = cloneFrame.origin.y + cloneFrame.size.height;


}

Ответы [ 2 ]

7 голосов
/ 10 декабря 2010

[UIButton buttonWithType:UIButtonTypeRoundedRect] дает вам уже автоматически выпущенный объект.Это означает, что вы не «владеете» объектом и, следовательно, не несете ответственности за его освобождение.

Если бы вы сохранили его, то вы бы явно заявили, что хотите сохранить этот объект дляВы сами, а это значит, что вы бы взяли на себя ответственность за его выпуск.

UIView сохранит свои подпредставления, поэтому ответственность за их выпуск лежит на UIView.UIView выпустит свои подпредставления, когда само будет освобождено, или когда подпредставления удалены из суперпредставления.

В основном, если вы не сделали alloc/init, new, copy илиretain объект, тогда это не ваш объект, и вы не несете ответственности за его освобождение.Вам не нужно беспокоиться об этом, какой бы объект, который владеет объектом (в вашем случае UIView), освободит его, когда с ним будет покончено.

1 голос
/ 09 декабря 2010

Когда вы addSubview:, получатель сохраняет аргумент и освобождает его, когда вы удаляете его одним из методов, которые это делают.

...