1

ARC에 몇 가지 문제가 있습니다. 나는 배수보기를 ScrollView에 추가하려고합니다. 사용자가 하나의보기를 탭하면 작업이 호출됩니다. ARC - 여러 하위보기 삽입 및 작업 처리

그러나 사용자는 I이 메시지가보기 탭 :

어떻게 내가보기를 유지할 수 "할당이 해제 된 인스턴스에 보낸 메시지를?" 당신은 당신의 ViewController의 모든 ChannelViewController 인스턴스에 대한 참조를 보유 할 필요가

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view from its nib. 
    int i; 
    for (i=0;i<10;i++) { 
     ChannelViewController *channelView = [[ChannelViewController alloc] init]; 
     [channelView.view setFrame:CGRectMake(i*175, 0, 175, 175)]; 
     //channelsScrollView is a ScrollView 
     [self.channelsScrollView addSubview:channelView.view]; 
    } 
    [self.channelsScrollView setContentSize:CGSizeMake(i*175, 175)]; 
} 

답변

2

:

이의 ViewController 내 코드입니다. 코드에서 루프 반복마다 ARC가 ChannelViewController 인스턴스를 해제합니다. 이것을 피하는 가장 간단한 방법은 ViewController에서 배열 속성을 준비하는 것입니다.

// In ViewController.h 
@property (nonatomic, retain) NSMutableArray * channelViews; 

// In ViewController.m 
@synthesize channelViews; 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    self.channelViews = [[NSMutableArray alloc] initWithCapacity:10]; 

    // Do any additional setup after loading the view from its nib. 
    int i; 
    for (i=0;i<10;i++) { 
     ChannelViewController *channelView = [[ChannelViewController alloc] init]; 
     [channelView.view setFrame:CGRectMake(i*175, 0, 175, 175)]; 
     //channelsScrollView is a ScrollView 
     [self.channelsScrollView addSubview:channelView.view]; 
     [self.channelViews addObject:channelView];  // <-- Add channelView to the array 
    } 
    [self.channelsScrollView setContentSize:CGSizeMake(i*175, 175)]; 
} 
+0

나는 비슷한 것을보고 있지만 왜 이것이 필요한지 이해할 수 없습니다. 카즈키는'[self.channelsScrollView addSubview : channelView.view]'를 호출하므로'self.channelsScrollView'는 이제'channelView.view'에 대한 참조를 보유합니다. UIView 자체 컨트롤러에 대한 참조를 보유하고 있습니까? 이상하게 보입니다. –

+0

UIView가 내부적으로 UIViewController에 대한 참조를 보유하고 있는지 여부는 알 수 없지만 유지 관리주기가 발생하지 않도록 약한 참조 여야합니다. – barley

+0

아, 좋은 지적, 고마워. –