人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

(iOS6,7)NSURLConnectionで大容量のデータをアップロードするとメモリ枯渇でアプリが終了
大容量の動画や写真をサーバーにアップロードする処理を作っているのですが、
NSURLConnectionのBodyに設定するため、mallocしたときにメモリが枯渇してアプリが終了してしまいます。

NSURLConnectionで端末の空きメモリ以上のデータを送信するためにはどのようにしたらよいでしょうか。

●質問者: ankomoti3260
●カテゴリ:コンピュータ インターネット
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● snow0214
●100ポイント

このコードでキャッシュメモリをゼロにしてみてください。

 [[NSURLCache sharedURLCache] setMemoryCapacity:0];

ankomoti3260さんのコメント
コメントありがとうございます。 すみません。質問内容が悪かったです。 setHTTPBodyに設定する際、NSDATAに変換する必要があり、大容量のデータ(動画など)の場合はメモリ枯渇が発生クラッシュしてしまう状況でした。 最終的にはAFNetworkingで実現することが出来ました。

質問者から

具体的にはmultipart/form-dataで動画や画像などのバイナリデータ(端末の空き容量以上のデータ1GBなど)をサーバーに送る際に、NSDataに読み込もうとする箇所でメモリが枯渇しアプリが終了する状況です。

[postData appendData:NSString stringWithFormat:@"Content-Disposition: form-data; name=\"file\"; filename=\"%@\"\r\n",@"test.jpeg"]
dataUsingEncoding:NSUTF8StringEncoding;

[postData appendData:NSString stringWithFormat:@”Content-Type: image/jpeg¥r¥n¥r¥n”] dataUsingEncoding:NSUTF8StringEncoding?;

NSData *fileData = NSData alloc] initWithContentsOfFile:inputFilePath];


2 ● bg5551
●100ポイント

こちらは参考になりませんか。
http://blog.mudaimemo.com/2010/04/objective-cautorelease.html


3 ● ニコ
●100ポイント

こういったところも
http://d.hatena.ne.jp/touka_tt/20120712/1342031185


ankomoti3260さんのコメント
コメントありがとうございます。 すみません。質問内容が悪かったです。 参照先のページを拝見したかぎり、setHTTPBodyはNSDATAのため、大容量のデータ(動画など)をNSDATAに変換するときにメモリ枯渇が発生クラッシュしてしまうのではないでしょうか。 setHTTPBodyStreamもあったのですが、大容量の動画データをmultipart/form-dataにする方法が見つけられなかったため、AFNetWorkingのライブラリで代用しました。

質問者から

色々調べた結果、AFNetWorkingのライブラリで実現出来ました。
filePathUrlには@"file://形式のパス"

HTTPRequestOperationManager *manager = [HTTPRequestOperationManager manager];
manager.responseSerializer = [AFHTTPResponseSerializer new];

NSDictionary *params = @{@“param”: @“param”};
NSMutableURLRequest *request;
[request setTimeoutInterval:60];

request = [manager.requestSerializer multipartFormRequestWithMethod:@"POST"
URLString:urlStr
parameters:params
constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {
[formData appendPartWithFileURL:filePathUrl
name:@"file"
fileName:fileNameStr
mimeType:@"application/octet-stream"
error:nil];
}
error:NULL];


関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ