Xcode - EXEC_BAD_ACCESS when concatenating a large string

I get EXEC_BAD_ACCESS when concatenating a large string.

I read from the feed and create my webview. I create my line, for example:

NSString *pageData = @"<h1>header</h1>";

pageData = [pageData stringByAppendingFormat@"<p>"];
pageData = [pageData stringByAppendingFormat@"self.bodyText"];
pageData = [pageData stringByAppendingFormat@"</p>"];
etc

I have a problem: self.bodytext - 21,089 characters with spaces when I do word counting. Is there a better way to do this?

thank

+3
source share
4 answers

You will definitely want to use NSMutableString for something like this:

NSMutableString * pageData = [NSMutableString stringWithCapacity:0];

[pageData appendFormat:@"<h1>header</h1>"];
[pageData appendFormat:@"<p>"];
...

NSMutableString , NSString . NSString , stringByAppendFormat:, , . , .

NSMutableString appendFormat:, . ( ...WithCapacity:). , .

+6

:

  • NSMutableString . NSString - , , , stringByAppendingFormat:, NSString, .

    NSMutableString * pageData = [NSMutableString stringWithCapacity:0];

  • appendString: NSMutableString stringByAppendingFormat: appendFormat:. , . . String. stringByAppendingFormat: , , , , ( - ), EXEC_BAD_ACCESS, . , , bodyText . , '

    ' NSMutableString, :

    [pageData appendString:@"<p>"];

  • self.bodyText , ( @ "self.bodyText" - "self.bodyText", . :

    [pageData appendString:self.bodyText];

, :

pageData = [pageData stringByAppendingFormat:@"<p>%@</p>", self.bodyText];

%@ , description descriptionWithLocale: . NSString .

+2

, . 50 000 100 . . - , , , , , . , , . , , - - %@ .

+1

appendString: appendFormat: .

pageData = [pageData stringByAppendingString:@"<p>"];
pageData = [pageData stringByAppendingString:@"self.bodyText"];
pageData = [pageData stringByAppendingString:@"</p>"];

or do not use an arbitrary string as a format:

pageData = [pageData stringByAppendingFormat:@"<p>%@</p>" , @"self.bodyText"];

If you create a string in parts, use NSMutableString instead of a few calls to stringBy.

Remember that% is a special character for formatted strings and for url screens, so if bodyText contains a URL, it can easily cause a crash.

+1
source

Source: https://habr.com/ru/post/1744018/


All Articles