- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
好的,所以我有一个方法将 NSString
作为输入,对该字符串的内容进行操作,然后返回处理后的字符串。所以声明是:
- (NSString *) processString: (NSString *) str;
问题:我应该只返回我用作“工作”缓冲区的 NSMutableString
实例,还是应该围绕可变的实例创建一个新的 NSString
,并且返回那个?
那么我应该这样做:
- (NSString *) processString: (NSString *) str
{
NSMutableString *work = [NSMutableString stringWithString: str];
// process 'work'
return work;
}
或者这个:
- (NSString *) processString: (NSString *) str
{
NSMutableString *work = [NSMutableString stringWithString: str];
// process 'work'
return [NSString stringWithString: work]; // or [work stringValue]?
}
第二个复制了我返回的字符串,除非 NSString
做了像修改时复制这样的智能操作。但是第一个是返回调用者可以在理论上稍后去修改的东西。我不在乎他们是否这样做,因为字符串是他们的。但是,是否有正当理由更喜欢后一种形式而不是前一种形式?而且,stringWithString
或 stringValue
哪个更受青睐?
最佳答案
完全取决于您需要的防御程度。
您的代码的客户端没有合理的方法来测试可变性。因此,没有合理的方法可以让客户端从 NSString
转换为 NSMutableString
并突然实现字符串的无编译器警告可变性。
因此,只要您信任您的客户,您也可以返回可变字符串(作为 NSString
)。即使客户端做了一些愚蠢的事情并对其进行了修改,该死的编译器警告也不会中断。
它确实重要的地方是当您返回某些不应在外部改变的对象的可变后备存储时。在这种情况下,客户端可能会忽略编译器警告和/或强制转换为可变变体,从而完全破坏您的对象。
或者,更巧妙地,客户端可能会获取对假定不可变返回类型的引用并持有它足够长的时间以致于稍后发生变异,从而使他们的引用处于令人惊讶的状态。
最佳实践:在计算和返回 transient 值时,可变性无关紧要。返回对内部可变存储的引用时,最好制作一个不可变副本。
关于objective-c - 我应该在返回 NSString 的方法中返回 NSMutableString,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2934028/
NSMutableString *str, *str1; //这里分配 我正在使用[str appendString:str1] 不工作。[str appendFormat:str1] 不工作。 那么
@property (nonatomic, weak) id a; @property (nonatomic, weak) id sa; 我有两个弱点。数组将在复制后释放。但是 NSString 没有
我有一个相当大的循环,它获取一个字符串,对其执行一些操作,然后再进入下一个循环。我最初是释放它然后重新分配它,但认为这有点浪费资源,但不知道如何清除它以重用它。 最佳答案 一种方法是[myString
我有为 MD5 munge 准备消息的 java 代码 private static char[] jimsCopyRight = { 'C'、'o'、'p'、'y'、'r'、'i'、'g'、'h'、
我有这个代码: NSMutableString *printHead = [NSMutableString stringWithFormat:@"%@, %@", firstTextField.tex
我在M文件开头声明了一个对象如下: NSMutableString *SomeString; 在一个方法中我尝试初始化它: SomeString = [NSMutableString stringW
我想创建一个字符串。根据条件,我必须附加一些额外的字符串。在这种情况下,首选使用哪个?是根据条件创建两个不同的字符串还是创建可变字符串以根据条件附加新字符串? 前 if(a==1) { Str
一直在玩弄仪器,但运气不太好,无法弄清楚如何解决此内存泄漏问题。 首先是代码: -(NSString *) randomizeHint:(NSString *) wordToShuffle{
我有以下将字符串数组转换为字符串的代码 -(NSString *) arrayToString:(NSMutableArray *) array { NSMutableString *strF
我制作了一个包含几个单词的数组,然后我将所有单词放入一个可变字符串中,然后将这个字符串的每个字符放入一个可变数组中。然而,“wordSplitted”是一个可变的字符数组,在模拟器中每次启动应用程序时
我在使用谓词过滤数组时遇到问题。我的代码是这样的: NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,
我正在尝试构建一个字符串数组,该数组将添加到 XML soap 请求中。 我有一个简单的循环来构建数组: MarcTagsList 是一个 NSArray 字符串,它包含值 ["82a","100a"
NSMutableString *str = [[NSMutableString alloc] init]; 假设 str 有权知道一个值“me”。 并且在单击按钮时我希望 str 的值被重置。即字符
我是 objective-c 的绝对新手 使用此代码 NSMutableString *teststring; [teststring appendString:@"hey"]; NSLog(test
将 Swift String 转换为 NSString 效果很好。 let string = "some text" let nsString = string as NSString 但是当我这样做
我知道类似的问题已经被一次又一次地问到,但我请求您耐心等待,因为我似乎找不到有帮助的答案。 我的应用程序存在漏洞,这让我抓狂。实际上,使用 Leaks 不会将它们报告为泄漏,但 ObjectAlloc
我正在使用 XMLParser 来解析一些 XML 数据,它使用 NSMutableString *resultString 来存储标记字符。在每个 (- parser: didStarElement
我以字典格式的形式向 nsmutablestring 添加一些文本内容,并且每个字典都由“,”(commos)分隔。但是当获取这个总字符串时,它会显示 (,) 到结尾的字符串。那么如何删除该可变字符串
我有一个很大的 NSMutableString(可能有数百兆字节),需要对其执行大量 rangeOfCharacterFromSet: 操作。 为了提高性能,我想让一个 NSOperationQueu
我有以下代码 NSMutableString *ibmcountryCodeLabel=[[NSMutableString alloc]init]; NSMutableString *imobileN
我是一名优秀的程序员,十分优秀!