Nsdata 到 bytearray 的转换。 iPad 物理设备上的内存问题和崩溃
Nsdata to bytearray conversion. Memory issue and crash on iPad physical device
我正在使用以下代码将 nsdata 转换为 bytearray。它在模拟器中运行良好。在设备上,它疯狂地分配内存到 600 MB [在循环内的 'addobject' 行] 并崩溃。我正在阅读的文件大小为 30 MB。我在输出 windows 中看到的错误是 "memory issue"。该文件是 "zip" 文件
NSData *data = [[NSData alloc] initWithContentsOfFile:file];
const unsigned char *bytes = [data bytes];
NSUInteger length = [data length];
NSMutableArray *byteArray = [NSMutableArray array];
for (NSUInteger i = 0; i < length; i++) {
@autoreleasepool {
[byteArray addObject:[NSNumber numberWithUnsignedChar:bytes[i]]]; }
}
我在 NSDictionary 中使用这个 bytearray 并在字典上执行 "dataWithJSONObject" 到 post json 到 REST Web 服务。
有关将 NSData 转换为字节数组的内存效率更高的方法,请参阅 How to convert NSData to byte array in iPhone?
如果您的最终目标是 post 将二进制数据传输到 JSON 中的 Web 服务,请尝试以下操作:
- Base64 编码字符串中的数据,如 here 所述。这可以在 JSON 正文中传递。
- 或者,如果您可以灵活地更改此传输的服务器端,请避免在 JSON 中使用 base64 编码的数据,而是直接 post 使用 HTTP [=45] 的二进制内容=] 或放置。这样会更有效率。
对于第二种方法,我可以想到两种方法:
Here is an example for the scenario of sending an image,但只要您可以将其加载到 NSData 对象中,任何文件类型都可以使用。
或者,像这样的东西应该可以工作
NSData *data = [NSData dataWithContentsOfFile:file];
NSURL *url = [NSURL URLWithString:@"your_url_here"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"PUT"];
NSDictionary *headers = @{@"Content-Type": @"application/octet-stream"};
[request setAllHTTPHeaderFields:headers];
[request setHTTPBody:data]
// Use an URLSession object task to execute the request
最后,如果数据在编码发送前能在客户端进行压缩就更好了!
希望对您有所帮助。
我正在使用以下代码将 nsdata 转换为 bytearray。它在模拟器中运行良好。在设备上,它疯狂地分配内存到 600 MB [在循环内的 'addobject' 行] 并崩溃。我正在阅读的文件大小为 30 MB。我在输出 windows 中看到的错误是 "memory issue"。该文件是 "zip" 文件
NSData *data = [[NSData alloc] initWithContentsOfFile:file];
const unsigned char *bytes = [data bytes];
NSUInteger length = [data length];
NSMutableArray *byteArray = [NSMutableArray array];
for (NSUInteger i = 0; i < length; i++) {
@autoreleasepool {
[byteArray addObject:[NSNumber numberWithUnsignedChar:bytes[i]]]; }
}
我在 NSDictionary 中使用这个 bytearray 并在字典上执行 "dataWithJSONObject" 到 post json 到 REST Web 服务。
有关将 NSData 转换为字节数组的内存效率更高的方法,请参阅 How to convert NSData to byte array in iPhone?
如果您的最终目标是 post 将二进制数据传输到 JSON 中的 Web 服务,请尝试以下操作:
- Base64 编码字符串中的数据,如 here 所述。这可以在 JSON 正文中传递。
- 或者,如果您可以灵活地更改此传输的服务器端,请避免在 JSON 中使用 base64 编码的数据,而是直接 post 使用 HTTP [=45] 的二进制内容=] 或放置。这样会更有效率。
对于第二种方法,我可以想到两种方法:
Here is an example for the scenario of sending an image,但只要您可以将其加载到 NSData 对象中,任何文件类型都可以使用。
或者,像这样的东西应该可以工作
NSData *data = [NSData dataWithContentsOfFile:file]; NSURL *url = [NSURL URLWithString:@"your_url_here"]; NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url]; [request setHTTPMethod:@"PUT"]; NSDictionary *headers = @{@"Content-Type": @"application/octet-stream"}; [request setAllHTTPHeaderFields:headers]; [request setHTTPBody:data] // Use an URLSession object task to execute the request
最后,如果数据在编码发送前能在客户端进行压缩就更好了!
希望对您有所帮助。