나는 그것에 아무런 문제가 보이지 않습니다. 사전 아크, 나는 항상 assign
그들의 IBOutlets를 만들었습니다 . 왜냐하면 그들은 이미 슈퍼 뷰에 의해 유지되기 때문입니다. 당신이 그 (것)을하면 weak
, 당신은 당신이 지적으로, viewDidUnload에서 그들을 nil을 할 필요가 없습니다.
한 가지주의 사항 : ARC 프로젝트에서 iOS 4.x를 지원할 수 있지만 weak
그렇게하면 사용할 수 없으므로을 사용해야 합니다 assign
.이 경우 viewDidUnload
피하기 위해 참조를 생략하고 싶습니다 매달려있는 포인터. 다음은 내가 경험 한 매달려있는 포인터 버그의 예입니다.
UIViewController에는 우편 번호를위한 UITextField가 있습니다. CLLocationManager를 사용하여 사용자 위치를 역 지오 코딩하고 우편 번호를 설정합니다. 델리게이트 콜백은 다음과 같습니다.
-(void)locationManager:(CLLocationManager *)manager
didUpdateToLocation:(CLLocation *)newLocation
fromLocation:(CLLocation *)oldLocation {
Class geocoderClass = NSClassFromString(@"CLGeocoder");
if (geocoderClass && IsEmpty(self.zip.text)) {
id geocoder = [[geocoderClass alloc] init];
[geocoder reverseGeocodeLocation:newLocation completionHandler:^(NSArray *placemarks, NSError *error) {
if (self.zip && IsEmpty(self.zip.text)) {
self.zip.text = [[placemarks objectAtIndex:0] postalCode];
}
}];
}
[self.locationManager stopUpdatingLocation];
}
적절한 시점 에이보기를 닫고 self.zip을 생략하지 않으면 viewDidUnload
대리자 콜백이 self.zip.text에서 잘못된 액세스 예외를 던질 수 있음을 발견했습니다.
IBOutletCollection()
해서는 안되며weak
그렇지 않으면로 반환됩니다nil
.