Проблемы при использовании релиза по NSMutableURLRequest - PullRequest
0 голосов
/ 09 мая 2011

У меня вопрос по теме управления памятью. Когда я создаю NSMutableURLRequest и я освобождаю его, после того как метод вернул сбой приложения.

Если убрать строку с выпуском на NSMutableURLRequest, приложение работает. Но это позволило утечке памяти.

Что не так?

Это код:

- (NSString *) callServerWhaitReturn {

    NSMutableURLRequest * theRequest = [ NSMutableURLRequest requestWithURL: [NSURL URLWithString: self.internalUrl] cachePolicy: NSURLRequestUseProtocolCachePolicy timeoutInterval: 60.0];

    [theRequest setHTTPMethod: @"POST"];
    [theRequest setHTTPBody:[[NSString stringWithFormat:@"p1=%@", self.parameters] dataUsingEncoding: NSASCIIStringEncoding]];
    NSURLResponse * response;
    NSError * error;
    NSData * result = [NSURLConnection sendSynchronousRequest: theRequest returningResponse: &response error: &error];
    NSString * toReturn = [[[NSString alloc] initWithData: result encoding:NSASCIIStringEncoding] autorelease];
    NSLog(@"%@", toReturn );
    [theRequest release];
    if (response) {
        [response release];
    }
    if (result) {
        [result release];
    }
    [toReturn autorelease];
    return toReturn;
}

Ответы [ 3 ]

4 голосов
/ 09 мая 2011

requestWithURL:cachePolicy:timeoutInterval: возвращает автоматически освобожденный объект.Если вы не сохранили его, вы не должны выпускать его.

Вот правила управления памятью .

1 голос
/ 09 мая 2011
NSMutableURLRequest * theRequest = [ NSMutableURLRequest requestWithURL: [NSURL URLWithString: self.internalUrl] cachePolicy: NSURLRequestUseProtocolCachePolicy timeoutInterval: 60.0];

- автоматически выпущенный объект.Вы не можете release это.Вы должны выделить объект и вступить во владение только тогда, вы должны release его.Если вы хотите release, тогда allocate объект, подобный этому

NSMutableURLRequest * theRequest = [[NSMutableURLRequest alloc] initWithURL: [NSURL URLWithString: self.internalUrl] cachePolicy: NSURLRequestUseProtocolCachePolicy timeoutInterval: 60.0];
0 голосов
/ 09 мая 2011

Вы не можете освободить theRequest, потому что вы его не распределили.

Поэтому удалите приведенный ниже оператор из своего кода.

[theRequest release];

используйте метод initWithURL NSMutableURLRequest.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...