我们有一个iOS应用程序。一个基本的事情是,将图像,pdf和txt文件上传到服务器。我们使用iOS 8.1.3的iPad,该应用程序是InHouseDistribution。
目前我们使用BlackRaccoon通过ftp传输数据,但有时在随机计算图像后,iPad的内存已满,应用程序崩溃。
我有facebook或whatsapp等应用程序。他们传输文件而不会崩溃。
您是否知道是否有更好的方法可以将文件从iPad传输到服务器。
感谢您的每一个提示。
答案 0 :(得分:1)
我会查看生命周期,如果在内存密集的操作周围使用@autoreleasepool。一个典型的问题是对循环内的许多图像执行操作。
使用仪器检查由于保留但未泄漏的内存导致的泄漏和内存丢失。后者是未使用的内存,仍然指向。在仪器上的分配工具中使用标记生成(快照)。
如何使用“快照”查找内存褶皱,请参阅:bbum blog
基本上,该方法是运行Instruments分配工具,获取快照,运行代码的迭代并重复另外3到4次快照。这将指示在迭代期间分配但未释放的内存。
要弄清楚披露的结果,以查看个别分配。
如果您需要查看对象使用仪器的保留,释放和自动释放的位置:
在仪器中运行,在分配中设置“记录参考计数”(对于Xcode 5及更低版本,您必须停止记录以设置选项)。导致应用程序运行,停止录制,向下钻取,您将能够看到所有保留,发布和自动释放的位置。
答案 1 :(得分:0)
这可能会有所帮助
NSData *imageData = UIImageJPEGRepresentation(image, 0.6);
NSString *base64String;
if(imageData!=nil)
{
base64String = [CMCrypto base64EncodeData:imageData];
}
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:dictionary options:0 error:nil];
NSString *jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
[_uploadPhoto callServiceWithStringAndImage:[NSString stringWithFormat:@"%@",jsonString] ImageBase64:[NSString stringWithFormat:@"%@",base64String]];
答案 2 :(得分:0)
首先,您应该知道如何确定问题。在您的情况下,问题不是“如何将文件上传到服务器”。
这种情况下的问题是“如何管理内存”。因为当你准备上传文件时,如果你没有管理它们,那么它在内存中仍然存在。
文件,尤其是图像,会占用你内存中的大量空间,所以当你循环上传功能时,它所占用的内存会增加无穷大。
因此,您应该阅读一些文章,关于Memory Management
的教程来解决您的问题。
我认为retain cycle
是问题的原因。所以,看看strong,weak reference
,weak delegate
,block
,你可以找到一些东西。