在连接一个大字符串时,我得到一个EXEC_BAD_ACCESS.
我从一个feed读取并创建我的webview我建立了我的字符串,如:
NSString *pageData = @"header
"; pageData = [pageData stringByAppendingFormat@""]; pageData = [pageData stringByAppendingFormat@"self.bodyText"]; pageData = [pageData stringByAppendingFormat@"
"]; etc
我得到的问题是self.bodytext是21,089个字符,当我对字进行计数时有空格.这样做有更好的方法吗?
谢谢
您肯定希望使用NSMutableString这样的事情:
NSMutableString * pageData = [NSMutableString stringWithCapacity:0]; [pageData appendFormat:@"header
"]; [pageData appendFormat:@""]; ...
NSMutableString
是为这种顺序连接而设计的,其中基本的NSString类实际上并不意味着以这种方式使用.每次调用时stringByAppendFormat:
,您的原始代码实际上会分配一个新的NSString ,然后继续将已经附加的所有数千个字符复制到其中.这可能很容易导致内存不足错误,因为随着您添加越来越多的调用,临时字符串的大小将呈指数级增长.
使用的NSMutableString当你调用不会重新复制所有的字符串数据appendFormat:
,因为可变的字符串维护一个内部缓冲区,只是到它的结束大头针新的字符串.根据字符串的大小,您可能希望提前保留大量内存(为...WithCapacity:
参数使用有意义的数字).但除非你遇到性能问题,否则没有必要走这条路.