2009-10-08 11 views
0

은 내가 UIPickerView의 행을 사용자 정의, 그래서 다음과 같이 나는 그것의 위임에 viewForRow 방법을 구현 해요 :코코아 터치 : 메모리 관리

- (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view { 
    if (view) { 
     return view; 
    } else { 
     NSString *s = [datePickerValues objectAtIndex:row]; 

     UILabel *l = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 300, 44)]; 
     l.text = s; 
     l.font = [UIFont boldSystemFontOfSize:18]; 
     l.textAlignment = UITextAlignmentCenter; 
     l.backgroundColor = [UIColor purpleColor]; 

     [l autorelease]; 
     return l; 
    }  
} 

내가의 Obj-C에 새로운 해요.

저는 aloc/initing이므로 메모리 관리 가이드에 따라 릴리스해야합니다. 그러나 나는 또한 그것을 돌려 줄 필요가있다. 자동 복구가 정상입니까?

+0

당신의 코드에서 줄을 깎을 수 있습니다 return [l autorelease]; – pxl

+0

alloc/init의 일부로 autorelease를 사용하거나 누그십시오. – Lounges

답변

10

예 자동 복구가 바로 여기 있습니다.

+0

사실 NSAutoreleasePool을 발명 한 동기는 바로이 사용 사례였습니다. –

3

나는 대회가 ALLOC 문을 autorelease를하는 것입니다 생각 :

UILabel *l = [[[UILabel alloc] initWithFrame:CGRectMake(0, 0, 300, 44)] autorelease]; 

당신이 방법 종료 후 존재하는 객체가 필요하기 때문에, 당신은 오토 릴리즈를 사용하는 수 밖에 없다. 일반적으로 호출 메서드에서 복사본을 유지하거나 무작위로 해제 할 수 있어야합니다. 이 경우 pickerView가이 작업을 수행하므로 걱정할 필요가 없습니다.