将NSArray转换为NSString时遇到了一些问题。
这是代码。
- (void)createStringWithArray:(NSArray *)arr_1 andTheOtherArray:(NSArray *)are_2
{
NSString *outputString = @"Start";
if (arr_1) {
for (Object *object in arr_1) {
outputString = [outputString stringByAppendingFormat:@"\n(%f, %f)", object.value1, object.value2];
}
outputString = [outputString stringByAppendingFormat:@"\nArray 1 End"];
}
if (arr_2) {
for (Object *object in arr_2) {
outputString = [outputString stringByAppendingFormat:@"\n(%f, %f)", object.value1, object.value2];
}
outputString = [outputString stringByAppendingFormat:@"\nArray 2 End"];
}
NSLog(@"%@", outputString);
}
每个are_1有48个对象和1568个对象,并且是_2。
我找不到iPhone模拟器的任何问题 但是,该应用程序崩溃,没有使用iPad mini和iPhone5设备的日志。 它发生在第二个循环函数上。
我猜必须有内存问题,但我不知道到底出了什么问题。
请帮忙。
答案 0 :(得分:2)
在方法中,您声明您有两个数组(arr_1和is_2)但在IF中您使用的是arr_1和arr_2,因此即使您不执行代码,编译器也应显示错误。
答案 1 :(得分:1)
您应该使用NSMutableString
代替NSString
。字符串应该是可变的
- (void)createStringWithArray:(NSArray *)arr_1 andTheOtherArray:(NSArray *)arr_2
{
NSMutableString *outputString = [[NSMutableString alloc] initWithString:@"Start"];
if (arr_1) {
for (Object *object in arr_1) {
[outputString appendFormat:@"\n(%f, %f)", object.value1, object.value2];
}
[outputString appendString:@"\nArray 1 End"];
}
if (arr_2) {
for (Object *object in arr_2) {
[outputString appendFormat:@"\n(%f, %f)", object.value1, object.value2];
}
[outputString appendString:@"\nArray 2 End"];
}
NSLog(@"%@", outputString);
}
答案 2 :(得分:0)
您将botharrays分配给单个变量outputSting
。将它作为不同的变量并将它们连接起来。还要注意在方法中传递参数。
答案 3 :(得分:0)
如果您的阵列中有很多项目,那么您可能会占用大量内存。每次你有:
outputString = [outputString stringByAppendingFormat:@"..."];
您正在反复创建新字符串,但旧字符串使用的内存仍在使用中。您无法手动释放此内存,因为您不拥有它,它会在下次自动释放池耗尽时释放,但由于池中没有耗尽池,因此存在内存不足的风险。 / p>
这可以通过简单地使用可变字符串来解决。
- (void)createStringWithArray:(NSArray *)arr_1 andTheOtherArray:(NSArray *)are_2
{
NSString *outputString = [NSMutableString stringWithString:@"Start"];
if (arr_1) {
for (Object *object in arr_1)
[outputString appendFormat:@"\n(%f, %f)", object.value1, object.value2];
[outputString appendString:@"\nArray 1 End"];
}
if (arr_2) {
for (Object *object in arr_2)
[outputString appendFormat:@"\n(%f, %f)", object.value1, object.value2];
[outputString appendString:@"\nArray 2 End"];
}
NSLog(@"%@", outputString);
}