Вы вроде как должны принимать это в каждом конкретном случае.общий ответ «как только вы закончите с этим», если только это не тривиальное распределение.для тривиальных распределений (например, NSString * firstName
), вы можете просто подождать, пока не освободится или не будет заменен (например, setFirstName:
).это просто упрощает реализацию.
ваш пример немного отличается.
// typically, you will set these to nil right when they
// have finished and you have grabbed what you need.
// that's pretty common for an async one shot request.
@property (nonatomic, retain) NSURLConnection *registerConnection;
@property (nonatomic, retain) NSURLConnection *updateParticularsConnection;
@property (nonatomic, retain) NSMutableURLRequest *requestURL;
и
// in the context of your program, this allocation could be large.
// in many cases, you'll simply convert it to the destination (if
// it's an image, just turn it into an image without holding onto
// the data representation), then dispose of it.
@property (nonatomic, retain) NSMutableData *responseData;
важно: вы обрабатываете ивы вашего экземпляра непосредственно в OP -используйте аксессуары, они избавят вас от головной боли.Вот изменения, которые вы бы сделали, чтобы написать свою программу, используя методы доступа:
- (void)performRegistration {
self.requestURL = [[[NSMutableURLRequest alloc] initWithURL:[NSURL URLWithString:@"myURL"]] autorelease]; // use setter and autorelease
self.registerConnection = [[[NSURLConnection alloc] initWithRequest:requestURL delegate:self startImmediately:YES] autorelease]; // use setter and autorelease
}
- (void)updateParticulars {
[self.requestURL setURL:[NSURL URLWithString:@"http:myURL.com"]]; // use getter
self.updateParticularsConnection = [[[NSURLConnection alloc] initWithRequest:requestURL delegate:self startImmediately:YES] autorelease]; // use setter and autorelease
}
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
if (self.responseData == nil) { // use getter
self.responseData = [NSMutableData data]; // use setter and autorelease
}
[self.responseData appendData:data]; // use getter
}
- (void)connectionDidFinishLoading:(NSURLConnection *)connection {
if (connection == self.registerConnection) { // use getter
NSMutableString *responseString = [[NSString alloc] initWithData:self.responseData encoding:NSUTF8StringEncoding]; // use getter
NSLog(@"Register connection recieved data reads : %@", self.responseString); // use getter
if ([responseString isEqualToString:@"-1"]) {
self.requestURL = nil; // use setter
}
else if ([responseString isEqualToString:@""]) {
self.requestURL = nil; // use setter
}
else {
[self updateParticulars];
}
self.responseData = nil; // use setter
self.registerConnection = nil; // use setter
[responseString release];
}
else if (connection == self.updateParticularsConnection) { // use getter
self.responseData = nil; // use setter
self.requestURL = nil; // use setter
self.updateParticularsConnection = nil; // use setter
}
}