【发布时间】:2009-02-10 09:01:17
【问题描述】:
我想对删除的 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:@"<" withString:@"<"];
return string;
}
但不是每次分配都会泄漏内存吗?还是 stringByReplacingOccurrencesOfString 返回自动释放的字符串?我们如何确认 stringByReplacingOccurrencesOfString 字符串是自动释放的?还是应该用[... autorelease] 包装它们?
即使它们是自动发布的,最好避免在 iPhone 上自动发布。 (见here)。那么我们会这样做:
-(NSString*) unescape:(NSString*)string
{
NSString* string2 = [string stringByReplacingOccurrencesOfString:@"'" withString:@"'"];
// don't release 'string' because we didn't allocate or retain it
NSString* string3 = [string2 stringByReplacingOccurrencesOfString:@"'" withString:@"'"];
[string2 release];
NSString* string4 = [string3 stringByReplacingOccurrencesOfString:@"'" withString:@"'"];
[string3 release];
//...and so on
}
但那是相当难看的代码。编写此代码进行多次替换的最佳方法是什么?你会怎么做?
【问题讨论】:
标签: cocoa-touch memory-management