// Create the request.
NSURLRequest *theRequest=[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://www.apple.com/"]
cachePolicy:NSURLRequestUseProtocolCachePolicy
timeoutInterval:60.0];
// create the connection with the request
// and start loading the data
NSURLConnection *theConnection=[[NSURLConnection alloc] initWithRequest:theRequest delegate:self];
if (theConnection) {
// Create the NSMutableData to hold the received data.
// receivedData is an instance variable declared elsewhere.
receivedData = [[NSMutableData data] retain];
} else {
// Inform the user that the connection failed.
}
既然我们没有“拥有”通过调用retain来接收数据,那么我们不是在泄漏内存吗?
你应该什么时候发布连接并收到数据呢?
答案 0 :(得分:1)
1 /关于连接,我们使用委托模式来处理这个内存管理。您分配init并在一个方法中设置委托。然后当你喜欢连接回调时:
- (void)connectionDidFinishLoading:(NSURLConnection *)connection {
[connection release];
}
或者您可以在任何其他委托方法中释放连接。这是他们将连接传回给你的原因之一。你将在iPhone中像UIImagePickerController一样很多地遇到这种委托模式(仅用于另一个例子),特别是当你必须等到网络完成发布时的网络问题
2 /来自评论,
// Create the NSMutableData to hold the received data.
// receivedData is an instance variable declared elsewhere.
因此,这很容易回答,因为receivedData是一个实例变量,您应该并且可以在dealloc
方法中释放它。另一个选择是为它声明一个@property (nonatomic, retain)
,如果多次设置receivedData,它将确保没有内存泄漏
答案 1 :(得分:0)
此代码拥有连接和数据。连接是使用alloc / init创建的,需要稍后发布,并且数据会被保留,因此也需要发布。