当前位置:  开发笔记 > 前端 > 正文

Xcode - 连接大字符串时的EXEC_BAD_ACCESS

如何解决《Xcode-连接大字符串时的EXEC_BAD_ACCESS》经验,为你挑选了1个好方法。

在连接一个大字符串时,我得到一个EXEC_BAD_ACCESS.

我从一个feed读取并创建我的webview我建立了我的字符串,如:

NSString *pageData = @"

header

"; pageData = [pageData stringByAppendingFormat@"

"]; pageData = [pageData stringByAppendingFormat@"self.bodyText"]; pageData = [pageData stringByAppendingFormat@"

"]; etc

我得到的问题是self.bodytext是21,089个字符,当我对字进行计数时有空格.这样做有更好的方法吗?

谢谢



1> e.James..:

您肯定希望使用NSMutableString这样的事情:

NSMutableString * pageData = [NSMutableString stringWithCapacity:0];

[pageData appendFormat:@"

header

"]; [pageData appendFormat:@"

"]; ...

NSMutableString是为这种顺序连接而设计的,其中基本的NSString类实际上并不意味着以这种方式使用.每次调用时stringByAppendFormat:,您的原始代码实际上会分配一个新的NSString ,然后继续将已经附加的所有数千个字符复制到其中.这可能很容易导致内存不足错误,因为随着您添加越来越多的调用,临时字符串的大小将呈指数级增长.

使用的NSMutableString当你调用不会重新复制所有的字符串数据appendFormat:,因为可变的字符串维护一个内部缓冲区,只是到它的结束大头针新的字符串.根据字符串的大小,您可能希望提前保留大量内存(为...WithCapacity:参数使用有意义的数字).但除非你遇到性能问题,否则没有必要走这条路.


如果self.bodyText恰好包含一个看起来像格式规范的子字符串(例如'%@'),该怎么办?在运行时,没有给出参数,是否会导致提问者进入EXEC_BAD_ACCESS?
由于问题中的示例和答案中的示例代码都没有实际使用格式,因此您应该使用appendString:for NSMutableString(请参阅http://developer.apple.com/mac/library/documentation/cocoa/reference/ Foundation/Classes/NSMutableString_Class/Reference/Reference.html#// apple_ref/doc/uid/20000156-appendString_)或stringByAppendingString:用于NSString实例(请参阅http://developer.apple.com/mac/library/DOCUMENTATION/Cocoa/参考/基金/班/ NSString_Class /参考/ NSString.html#// apple_ref/OCC/instm /的NSString/stringByAppendingString :)
推荐阅读
mobiledu2402851373
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有