0

私はこのコードを使用していますが、プロファイリングすると、変数 内response_errorに多くのメモリリークがあることがわかります。request_response

関数で使用される各変数のコードを配置するためにいくつかの場所を試しましたreleaseが、エラーメッセージの有無にかかわらずクラッシュし続けます。(ほとんどの場合、これはEXC_BAD_ACCESSメモリアクセスエラーを指します)

方法の問題かもしれないと思いますがNSURLConnection sendSynchronousRequest、よくわかりません。

誰かが私にアドバイスを与えるかrelease、このコードの正しい場所にブロックを配置できますか?

ありがとう

NSString *request_url = [NSString stringWithFormat:@"http://www.server.com/api/arg1/%@/arg2/%@/arg3/%@",self._api_key,self._device_id,self._token];
NSURL *requestURL = [NSURL URLWithString:request_url];
NSMutableURLRequest *request = [[[NSMutableURLRequest alloc] init] autorelease];
[request setURL:requestURL];
NSError *response_error = [[NSError alloc] init];
NSHTTPURLResponse *_response = [[NSHTTPURLResponse alloc] init];
NSData *response = [NSURLConnection sendSynchronousRequest:request returningResponse:&_response error:&response_error];
NSString *str_response = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding];
return [[str_response JSONValue] valueForKey:@"pairing"];

変数は次のように定義されます

@interface MyClass : NSObject {
  NSString *_device_id;
  NSString *_token;
  NSString *_api_key;
}
@property (nonatomic,retain) NSString *_device_id;
@property (nonatomic,retain) NSString *_api_key;
@property (nonatomic,retain) NSString *_token;
4

2 に答える 2

3

あなたは漏れ_responeていてresponse_error、不必要にそれらを割り当てています。ポインタをメソッドに渡すポインタを渡すと、ポインタが変更されてリークが発生します。また、自動リリースする必要がありますstr_response

NSError *response_error = nil; //Do not alloc/init
NSHTTPURLResponse *_response = nil; //Do not alloc/init
NSData *response = [NSURLConnection sendSynchronousRequest:request returningResponse:&_response error:&response_error];
NSString *str_response = [[[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding] autorelease];
return [[str_response JSONValue] valueForKey:@"pairing"];
于 2011-08-01T14:29:43.343 に答える
0

alloc / initを呼び出してから、releaseまたはautoreleaseを呼び出さない場合、メモリがリークする可能性があります。

于 2011-08-01T14:26:44.323 に答える