我有一个围绕网络请求构建的包装类。 我们称之为'WrapperNetworkRequest'
我包装它的原因是因为我回来后处理JSON响应。 然后使用'WrapperNetworkRequestDelegate'协议,将响应返回给委托。
我遇到的问题是,当使用'WrapperNetworkRequest'类作为自动释放的对象时,它会在网络请求完成之前自动释放。
我提出了我认为是一个可怕的想法([自我保留] + [自我释放]在适当的时间)
关于什么是处理这个问题的正确方法的任何想法/我做错了什么? 感谢
答案 0 :(得分:2)
不要让WrapperNetworkRequest
将自己保留在NSURLConnectionDelegate
实施方法中,而是让其代理人拥有所有权。一种可行的方法:
@interface Foo : NSObject <WrapperNetworkRequestDelegate>
@property (nonatomic, retain) WrapperNetworkRequest * wrappedRequest;
@end
@implementation Foo
@synthesize wrappedRequest;
//....
- (void)bar
{
WrapperNetworkRequest * request = [WrapperNetworkRequest aNewAutoreleasedRequest];
request.delegate = self;
self.wrappedRequest = request; // Foo instance assumes ownership
[request goGetData];
}
//....
@end
答案 1 :(得分:0)
当您必须延长对象的生命周期时,保留self
是一个完美的理念。你究竟是如何做到这一点的另一个问题是:你可以[self retain]
或者你可以将self
添加到共享的保留数组中,保留给定类型的所有对象。想想NSOperationQueue
。将操作对象添加到队列后,可以安全地释放操作,因为通过将其添加到队列,您已将操作的所有权转移到队列中。