ios - 是否需要保留数据源的 Controller 和 uiPickerview 的委托(delegate)?

标签 ios delegates uipickerview retain uipickerviewcontroller

据我所知,我不应该保留作为委托(delegate)或数据源的 Controller 。我制作了一个 UIPickerView,它是在属性访问器中创建的:

-(UIPickerView *)projectPicker {
  if (_projectPicker != nil) {
      return _projectPicker;
  }

  //Create Picker View
  UIPickerView *picker = [[UIPickerView alloc] initWithFrame:CGRectMake(0, 185, 0, 0)];
  picker.showsSelectionIndicator = YES;
  //Create source and delegate
  NSString *titleForRow0 = NSLocalizedString(@"<<Make Selection>>", @"projectPicker nil Label 0");
  NSArray *titlesForFirstRows = [[NSArray alloc] initWithObjects:titleForRow0, nil];
  ProjectPickerDatasource *pickerSource = [[ProjectPickerDatasource alloc] initWithManagedObjectContext:self.managedObjectContext
                                                                                      selectedProject:self.currentProject
                                                                                andTitlesForFirstRows:titlesForFirstRows];
  [titlesForFirstRows release];
  picker.delegate = pickerSource;
  picker.dataSource = pickerSource;

  self.projectPicker = picker;

  [pickerSource release];
  [picker release];


  return _projectPicker;

此崩溃报告试图访问未分配的 pickerSource 实例。 如果我将 pickerSource 组件分解为另一个属性,从而将其保留在此 Controller 中,它就可以完美运行。 我不认为这是正确的实现。 pickerView 在被销毁之前不会保留它的委托(delegate)和数据源吗?

最佳答案

如果 Picker 实例化了数据源,则可以保留它,但需要将其保留在某个地方。一定要释放它。

请注意,数据源的处理方式与委托(delegate)不同。

关于ios - 是否需要保留数据源的 Controller 和 uiPickerview 的委托(delegate)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7626750/

相关文章:

objective-c - 移动 UIView

ios - Swift:UIDocumentInteractionController 不工作?

c# - 为什么会有人想要使用 Invoke()(而不是 BeginInvoke())?

c# - 调用具有可选参数的 Func<T1, T2, T3>?

objective-c - 错误 : CONNECTION INTERRUPTED in Xcode running on Device

ios - Facebook iOS 集成登录窗口

ios - XCode 5 中的符号崩溃位置

iphone - 触摸外部时隐藏 UITableViewController 中的 UIPickerView

ios - 在另一个无效方法问题中调用 NSString

iphone - 为每个组件获取 UIPickerView 中的选定行