它有效...它不会崩溃,它似乎做我需要的。
这可能是我的应用程序的设计缺陷,但它是我所需要的最简单的方法。基本上会显示一个视图,并且对象内部的控件确定何时从superview中删除它(此时需要释放它)。
此时最容易做[self release]
,这似乎有效。
但是,我知道对象所有权,而且我知道实例化一个释放自身的对象并不是对象所有权的好设计 - 即所有者类(实例化新对象的那个)应该是一个发布它。然而,这将要求我编写回调给所有者类的委托方法,所有这些只是为了释放对象。
请问? :)
由于
答案 0 :(得分:2)
基本上会显示一个视图,并且对象内部的控件决定何时从superview中删除它(此时需要释放它)。
通常,superview具有对子视图的保留引用,并且当它被删除时,该引用被释放。为什么你需要再次发布它?
如果您执行[自我发布],则会从其他一些代码中删除此对象的所有权(该代码保留了对该代码的保留引用)。如果你这样做,那另一段代码仍然会对一块垃圾内存有一个非零引用。在我看来,应该通知另一段代码这种情况(然后它也可以发布版本本身)。
一旦添加到superview,我可以发布吗?
代码示例中的pattern you usually see是
UIView *view = [[UIView alloc] initWithFrame...];
[self addSubView:view];
[view release];
答案 1 :(得分:1)
如果你知道自己在做什么,而且你是自己班级的客户,那你很好。 关于一个糟糕的设计:你是对的。我建议通知正在实例化你要发布的那个消失的类,以便它可以释放它。您可以使用协议或NSNotificationCenter。