如何让对象在callback中释放?

我有一个用Objective C编写的类,它通过连接到networking来完成一些工作。 这个类以asynchronous的方式完成这个工作,并且用户给出了一个操作完成后调用的委托(如果失败则返回成功或错误)。 当没有更多的工作要做,可以释放对象的时候调用委托。

现在我想支持一个用例,当用户将在调用这个委托时释放我的类的对象。 这是自然的,因为我的课的实例是不可重用的。 目前,当我的电话从回叫返回时,它试图从剩下的地方继续发现它已被释放。 不用说,应用程序崩溃在这一点上。

我知道这可以做,因为NSURLConnection类就是这样做的。 可以在callback中释放连接对象- (void)connectionDidFinishLoading:(NSURLConnection *)connection 。 我怎么能做到这一点?

编辑:

这里是更好地理解它的代码:

 @class MyRequest; @protocol MyDelegate - (void)completedRequest:(MyRequest*)request; @end @interface MyRequest : NSObject { id<MyDelegate> myDelegate; //variables... } - (id)init; - (id)initWithUrl:(NSString*)url delegate:(id<MyDelegate>)delegate; - (void)dealloc; - (void)fire; @property (nonatomic, readonly) bool fired; @property (nonatomic, readonly) NSInteger resultCode; @property (nonatomic, readonly) NSString *errorMessage; @end 

用户创buildMyRequest的对象并发送fire消息。 MyRequest内部使用NSURLConnection来完成这项工作。 当收到回复时,我打电话给给委托的用户。

 - (void)connectionDidFinishLoading:(NSURLConnection *)connection { NSLog(@"In connectionDidFinishLoading..."); resultCode = RESULT_SUCCESS; [urlConnection release]; [urlRequest release]; if (myDelegate != nil) [myDelegate completedRequest:self]; } 

在调用委托callback来扩展对象的生命周期之前,只需添加[[self retain] autorelease] 。 这将导致它被释放,所以你可以完成。

另一种方法是使用NSObject performSelectorOnMainThread方法。 performSelector...机械将保留你的对象,调用方法,然后释放它。 如果你使performSelector方法等待直到完成,那么你现在就会遇到同样的问题,因为在调用过程中你会被释放。 如果你没有等到它完成,那么你不应该有一个内存问题,但是这样做后,你什么也不能做。 如果这是可以接受的,那么你应该没问题。