Objective c 我怎么才能摧毁这个采摘者?它赢了';别死

Objective c 我怎么才能摧毁这个采摘者?它赢了';别死,objective-c,Objective C,我不明白!我是个新手,所以这可能是我对目标C、生命、宇宙和/或一切的根本误解;请温柔一点 我将文本字段的inputView设置为self.datePicker—一个标准的UIDatePicker,它已在viewDidLoad中初始化 我向日期选择器添加了一些子视图。听起来很疯狂,我知道,但请容忍我 现在,我让该字段指定第一响应者,并调用self.datePicker=nil。更疯狂,是的 我再次点击文本字段,并期待两件事中的一件。任何一个都没有日期选择器。我毁了它,对吗?需要重新分配和初始化。或

我不明白!我是个新手,所以这可能是我对目标C、生命、宇宙和/或一切的根本误解;请温柔一点

  • 我将文本字段的inputView设置为self.datePicker—一个标准的UIDatePicker,它已在viewDidLoad中初始化
  • 我向日期选择器添加了一些子视图。听起来很疯狂,我知道,但请容忍我
  • 现在,我让该字段指定第一响应者,并调用self.datePicker=nil。更疯狂,是的
  • 我再次点击文本字段,并期待两件事中的一件。任何一个都没有日期选择器。我毁了它,对吗?需要重新分配和初始化。或者两个,一个新的日期选择器,没有额外的子视图。我不知道为什么我会想到这一点(同样,我毁了它!),但嘿,这是可能的
  • 我得到的是同一个选择器,包括添加的子视图,以及之前在其中设置的任何日期!怎么回事?!?我说

  • 我知道你在想我为什么要这么做。为什么要向datePicker添加视图,为什么不在需要时从superview中删除它们呢。但是让我们假设我有一个很好的理由这样做,并且这样做。有人能纠正我对对象行为明显不可靠的理解吗?

    没有,你没有破坏,只是在viewController上关闭了属性。 我认为您的设计可能有点不恰当,但是如果您创建了某种自定义日期选择器,您应该添加一个重置方法,该方法应该将自定义日期选择器返回到基本状态


    要将其从
    UITextField
    中删除,只需将
    inputView
    属性添加到日期选择器的新实例中。

    听起来好像有两个对日期选择器的引用,但您只将其中一个设置为nil。如果我听你的,这两个引用是self.datePicker和textField.inputView。但你只是把第一个设为零。因此该对象由textField.inputView“保留”


    总的来说,依靠电弧来摧毁物体似乎是不可靠的。此外,一旦日期选择器被销毁,“textField.inputView”是否会变为nil而不是新的日期选择器?

    但是如果我真的想完全删除它,并重新分配/初始化它,我该怎么做?而不是简单地将其重置为基本状态。(再次尝试简单地调用alloc/init,但无济于事)是的,我是这么说的:该对象由textField的inputView属性保留。是的,就是这样!设置textField.inputView=nil。然后点击该字段就可以输入键盘(需要再次alloc/init日期选择器)。我没有想到inputView会保留一个引用。谢谢你。我知道这听起来很奇怪,但这有助于我理解ARC。