2011-02-18 1 views
0

Interface Builder를 사용하여 응용 프로그램 대리인이 보유한 rootViewController를 빌드하고 있습니다. 저는이 XIB에서 몇 가지 컨트롤을 가지고 있습니다. 예를 들어 UIButtons, UISlider 등을 IBOutlets로 Interface Builder에서 적절하게 연결했습니다.iPhone SDK를 사용하여 NIB/XIB 내 컨트롤에 대한 할당 유지


@interface RootViewController : UIViewController { 
    IBOutlet UIButton *button1; 
    IBOutlet UIButton *button2; 
    ... 
} 

@property(nonatomic, assign) UIButton *button1; 
@property(nonatomic, assign) UIButton *button2; 

@end 

왜 그들이 할당 대신 유지 사용을 수행하십시오 XIB의 코드 구현 측면에서

, 나는 어떤 사람들이 사용 봤어요? 어떤 사람들은 assign 속성을 사용하지 않는 것을 보았습니다.

rootViewController의 XIB는로드 될 때까지 항상 참조를 포함하므로 retain을 사용하는 것이 무의미한가요? 아니면 그들은 게으르며 유지하는 단계를 거치지 않고 & dealloc을 합성합니까? 보기에 컨트롤을 필요로하고 viewController dealloc'ed되지 않은 주위에 참조를 유지할 다치게 할 수없는 것처럼 보입니다.하지만 XIB가 필요하지 않은 경우 다르게 처리하는지 궁금합니다.

메모리 관리 가이드, btw를 읽었습니다.

감사합니다.

답변

1

슈퍼 뷰에서 자녀를 머물러있는 한 모든 하위 뷰가 유지되는 대신 유지되는 것이 좋습니다.

슈퍼 뷰에서 제거한 다음 나중에 코드에서 하위 뷰로 추가하려고 할 때. 그건 불가능하다. 슈퍼에서 지울 때 보유 수는 아마도 0이 될 것입니다. Thats는 왜 당신이 보유를 사용하는지 이유 중 하나입니다. 그러면 컨트롤러 객체는 항상 뷰 객체의 소유자가됩니다.

나는 다른 이유를 생각할 수 없다. 은 할당 대신 보유를 사용해야한다.

저는 항상 보관함을 사용합니다. 콘센트의 모범 사례이며 컨벤션 인 것 같습니다.

+0

감사합니다. 정확히 같은 질문을 한 다른 사람을 찾았습니다. http://stackoverflow.com/questions/3112486/really-best-practice-to-retain-iboutlet-view-elements - 내가 남긴 댓글이 마음에 들었습니다. 당신이 걱정하는 것, 다른 누군가가 당신을 위해 그것을 지키기를 희망하지 않습니다. " :) 내가 보았던 코드 예제에서 "할당"을 사용하는 것은 예제가 매우 단순해서 발생했다고 생각합니다. 어쨌든, 다시 한번 감사드립니다. – taber