Objective-c iPhone:区域分配错误NSString内存限制?

Objective-c iPhone:区域分配错误NSString内存限制?,iphone,objective-c,xcode,memory,nsstring,Iphone,Objective C,Xcode,Memory,Nsstring,在iphone的xcode中使用此代码时,我得到了一个分配 区域错误。(使用模拟器) NSString*str=@“Sommetext”; 对于(int i=1;i

在iphone的xcode中使用此代码时,我得到了一个分配

区域错误。(使用模拟器)

NSString*str=@“Sommetext”;
对于(int i=1;i<50;i++){
str=[[str stringByAppendingString:@“\n”]
stringByAppendingString:str]stringByAppendingString:@'';
NSLog([NSString stringWithFormat:@“%d”,i]);
}
监控日志显示从1增加到26,然后

由于以下错误而崩溃

Appname(239,0xac5c9a28)malloc:* mmap(大小=805306368)失败(错误代码=12) *错误:无法分配区域

但是,在我的android(三星)上运行相同的代码(java)

Galaxy S2)即使循环1000次也没有问题

更新1:

使用GCD在后台运行代码会返回相同的错误,因此这不是主线程过载问题

更新2:

运行良好的Android java代码

String MsgText = "Some text";

for(i = 0 ; i < amount; i++)
        {
            ////Works on amount < 10000
            //Tested on Galaxy S2 **1GB Ram**
            MsgText = MsgText + MsgText;
        }
String MsgText=“Some text”;
对于(i=0;i
26轮后,您的
str
长度将为671.088.639个字符。它将崩溃,因为你的iPhone在系统中没有足够的内存来分配存储所有这些数据。

对于上面的代码,iPhone没有足够的内存来存储你的
str
数据,因此它将抛出分配错误并崩溃


然而,android使用的是另一个ARCI,它可能会利用cpu,因此代码可以在android上运行,尽管它缺乏足够的内存,但在iPhone上无法运行。

可能重复简短的问题(无法直接解决此问题)。。。您不使用NSMutableString有什么原因吗?:-)@SaschaHameister这会有什么帮助?手机的内存仍将不足。@Danilo没有承诺会有帮助。被认为是一种使用它的冲动,因为它可能会更好。当然,这不会改变任何关于这个问题的事情。希望评论仍然可以接受。(不会用这个评论打开一个新的答案。;)但是为什么它在我的android设备上正常工作,使用的java具有大致相同的内存(Galaxy S2)?@Danilo一定很可能,因为android设备正在使用不同的字符串内部表示,或者正在使用VM,或者正在保存内存(可能是以CPU周期为代价)。此外,您将拥有大量带有该代码的自动删除对象,除非您在启用ARC的情况下运行,并且代码经过优化。您将无法分配1.342.177.279个字符(第27轮)在内存为1GB的Android手机上。您不能分配比设备实际拥有的内存更多的内存。我打赌您的java代码会产生不同的结果。请检查。运行公共类测试{public static void main(String[]args){String str=“Sommetext”;for(int I=1;I<50;I++){str str str str+“\n”+str;System.out.println(i);}}}}}将使您的android设备(至少是我的设备)崩溃@Danilo:此代码在我的android上运行得非常好!对于(i=0;iString MsgText = "Some text"; for(i = 0 ; i < amount; i++) { ////Works on amount < 10000 //Tested on Galaxy S2 **1GB Ram** MsgText = MsgText + MsgText; }