gpt4 book ai didi

cocoa-touch - 字符串操作没有内存泄漏?

转载 作者:行者123 更新时间:2023-12-03 06:13:55 24 4
gpt4 key购买 nike

我想进行一系列字符串替换来删除 xml 转义字符,例如 '&'

1) 是否有现有的 UIKit 函数可以做到这一点?

2)如果没有,在不泄漏内存的情况下最好的方法是什么?想法如下:

-(NSString*) unescape:(NSString*)string
{
string = [string stringByReplacingOccurrencesOfString:@"'" withString:@"'"];
string = [string stringByReplacingOccurrencesOfString:@"&" withString:@"&"];
string = [string stringByReplacingOccurrencesOfString:@""" withString:@"\""];
string = [string stringByReplacingOccurrencesOfString:@">" withString:@">"];
string = [string stringByReplacingOccurrencesOfString:@"&lt;" withString:@"<"];
return string;
}

但是每次赋值不会泄漏内存吗?或者 stringByReplacingOccurrencesOfString 返回自动释放的字符串?我们如何确认 stringByReplacingOccurrencesOfString 字符串是自动释放的?或者我们应该用 [... autorelease] 包装它们?

即使它们是自动释放的,最好还是避免在 iPhone 上自动释放。 (参见here)。那么我们会这样做:

-(NSString*) unescape:(NSString*)string
{
NSString* string2 = [string stringByReplacingOccurrencesOfString:@"&apos;" withString:@"'"];
// don't release 'string' because we didn't allocate or retain it
NSString* string3 = [string2 stringByReplacingOccurrencesOfString:@"&apos;" withString:@"'"];
[string2 release];
NSString* string4 = [string3 stringByReplacingOccurrencesOfString:@"&apos;" withString:@"'"];
[string3 release];
//...and so on
}

但这是相当难看的代码。编写此代码以进行多次替换的最佳方法是什么?你会怎么做?

最佳答案

任何通过不以 init 开头或包含单词 copy 的方法返回新对象的 cocoa 方法都将返回一个自动释放的对象。所以上面的代码应该没有泄漏。

虽然在这里使用 NSMutableString 可能更容易。然后,您只需就地修改字符串,而不是创建一堆自动释放的字符串对象,这应该会让事情变得更干净。

此外,您可以迭代一个映射字典,找到并替换为每个项目的。甚至可以将其保存为应用程序中的 plist,以便以后轻松调整。

关于cocoa-touch - 字符串操作没有内存泄漏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/531550/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com