我是新来的可可触摸,和真正的非托管语言在一起。尽管我对语法有了很好的把握,但我在质疑我是否正确释放了一个对象。释放一个对象是否会销毁该对象?
我有一个创建对象的视图,
Communication *comm = [[Communication alloc] init];
[comm doSomething];
[comm release];
我知道我有,因为我拨作销毁这个对象,它不会自动释放。
我在对象上调用一个方法,该方法向我的服务器发出并获取信息。当数据返回时,它会抛出一个我的“消息分派器”响应的事件。我不想摧毁对象,直到它从服务器返回 - 这是我的困惑所在。
- 如果我在进行调用后直接释放这个对象,它是否会销毁对象? (我不想这样做)
- 如何正确地销毁此对象并将其引发到正在等待的数据之后?这发生在我的
comm
对象上的DataFinishedLoading
事件中。它是否应该摧毁自己,这是否是正确的做法?
调用我的对象的视图基本上说,创建这个对象,调用这个方法,并且开始你的快乐方式。它不关心它调用方法后会发生什么 - 无论它是否带回信息。它只是监听上的一种方法,以便以后可能会遇到的任何数据。我没有理由挂在对象的引用上,因为在我打电话后,我将永远不会使用同一个实例 - 除了自己清理之外。
是否可以将我的Communication对象设置为自动完成后自动释放? – 2011-06-03 15:51:03
@George:你可以做'comm = [[[Communication [alloc] init] autorelease];',并且一旦你离开了你所做的这个方法,这个对象就会被释放一次(但你不知道什么时候,并且不需要关心)。你可能的意思是,*我希望物体一旦完成工作就消失。这很棘手。最好的方法是以某种方式告知工作完成(例如通过委托方法),并让对象的创建者释放它。但是,一个对象不应该(自我释放);或者什么的,如果这就是你的意思。虽然可能,但这是一种糟糕的风格和混乱。 – DarkDust 2011-06-03 15:57:09
在我从视图中调用对象并在稍后的日期返回数据之后,Communication对象将向我的应用程序委托发信号通知我的服务器通过订阅发送了某些内容。那时,通信对象已经完成了所有的工作,而且不再需要它 - 至少是那个实例。在那里发布它是否合适?或者是你建议的[自我释放]? – 2011-06-03 16:00:52