0

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

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

NSString* str =@"Sommetext";
for (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(size=805306368) failed (error code=12) * error: can't allocate region

但是在我的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;
        }
4

2 回答 2

1

26轮后,您str将拥有671.088.639 个字符的长度。它会崩溃,因为您的 iPhone 在系统中没有足够的内存来分配来存储所有这些。

于 2013-09-19T22:28:56.410 回答
0

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

然而,android 使用了不同的 archi,它可能会使用 cpu,因此代码可以在 android 上运行,尽管它缺乏足够的内存,但不能在 iPhone 上运行。

于 2013-09-20T10:45:04.943 回答