Ata*_*a01 4 crash objective-c nsstring
在我正在研究的应用程序中,我正在从for循环中的文本文件中读取数值,然后进行一些计算并将结果附加到结果字符串.
该文件中包含22050个值.我注意到,超过一定数量的循环/值附加(~5300)它往往会崩溃.
我想也许我有一个内存泄漏,所以我摆脱了附加的字符串,一切正常.我试图摆脱一切,但字符串附加和应用程序崩溃.我对所有异常都有一个断点,我没有任何异常.
我想确保我开始一个新项目.所有我放在那里的是一个UIButton,推送时调用这段代码:
- (IBAction)TestPressed:(id)sender
{
NSString *testString = @"";
for (int i = 0; i < 22050; i++)
{
testString = [testString stringByAppendingString:@"12.34567890\n"];
}
NSLog(@"%@", testString);
}
Run Code Online (Sandbox Code Playgroud)
我在NSLog线上有一个断点.该应用程序之前崩溃了.
NSString长度有限制吗?它是否使用了太多内存?
Nik*_*uhe 13
问题是您在每次迭代中都创建了一个新字符串.有两种方法可以解决这个问题:使用可变字符串来创建结果:
NSMutableString *testString = [NSMutableString string];
for (int i = 0; i < 22050; i++)
{
[testString appendString:@"12.34567890\n"];
}
NSLog(@"%@", testString);
Run Code Online (Sandbox Code Playgroud)
...或使用自动释放池删除循环中的实例:
NSString *testString = @"";
for (int i = 0; i < 22050; i++)
{
@autoreleasepool {
testString = [testString stringByAppendingString:@"12.34567890\n"];
}
}
NSLog(@"%@", testString);
Run Code Online (Sandbox Code Playgroud)
请注意,我仅包含第二个版本,以说明问题首先出现的原因以及如何解决问题.它仍然是低效的,因为它创建了22049个临时字符串,平均长度为120,000个字符.
| 归档时间: |
|
| 查看次数: |
1209 次 |
| 最近记录: |