2010-12-09 2 views
0

런타임에 UIControl을 만들고 뷰에 addSubview :)를 추가하면 뷰에서이를 해제 할 것인가, 아니면 그렇게해야할까요? 당신은 수신기가 인수를 유지 addSubview:, 당신이하는 방법 중 하나를 통해 제거 릴리스를 할 때UIView는 Cocoa Touch에서 하위 뷰를 출시합니까?

-(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; 


} 
+0

코드의 간단한 예를 제공해 주시겠습니까? – DerekH

+0

위의 샘플 코드를 참조하십시오. – cfischer

답변

7

[UIButton buttonWithType:UIButtonTypeRoundedRect]은 이미 자동 렌더링 된 개체를 제공합니다. 즉, 개체를 "소유"하지 않으므로 개체를 공개 할 책임이 없습니다.

당신이 그것을 지키고 있었다면, 당신은 명시 적으로이 객체를 스스로 지키고 싶다고 말했을 것입니다. 그것은 당신이 그것을 풀어 놓을 책임이 있음을 의미합니다.

UIView은 서브 뷰를 유지하므로 공개하지 않으려면 UIView의 책임입니다. UIView은 자체가 dealloc 될 때 또는 하위 뷰가 수퍼 뷰에서 제거 될 때 하위 뷰를 릴리스합니다. 당신은하지 않았다 경우

기본적으로 alloc/init, new, copy 또는 retain 객체, 그것은 개체 아니다 당신은 그것을 해제에 대한 책임을지지 않습니다. 객체를 소유하고있는 객체 (어떤 경우에는 UIView)가 처리를 완료하면 객체를 릴리스하므로 걱정할 필요가 없습니다.

1

:

는 여기에 예제 코드입니다.

+0

그래서 자동 릴리즈해야합니다. – cfischer

+1

메모리 관리 규칙을 따라야합니다. – jer

+0

rtfm, 기본적으로 –

관련 문제