我正在Objective-C中编写一个方法,它返回一个基于NSMutableArray输入的字符串。我不打算让调用者修改字符串,但也不小心。该方法的当前签名读作:
- (NSMutableString *) generateString:(NSMutableArray *)myArray
该项目目前是一个命令行基础工具,以便学习绳索,但这最终将最终出现在iPhone应用程序中。
我的问题是:
2)当我返回NSMutableString时,我应该使用autorelease吗?如果你建议我返回一个NSString,它如何修改返回它?
3)如果我还想返回一个错误对象来识别是否发生错误,可能是一个枚举和一个字符串,在这种情况下所有权是如何工作的?该方法不称为alloc,new或copy,所以调用者如何知道?除了上面方法中的字符串外,我如何返回分配的错误对象?
谢谢!
答案 0 :(得分:5)
NSString
。它的内存占用量略小,如果调用者需要一个可变副本,那么创建一个只是一种方法:mutableCopy
。NSString
或NSMutableString
您的方法返回(至少如果您在方法中命名方法)! Memory Management Programming Guide列出了必须遵循的规则,以避免完全混乱,并深入解释所有内容。所以看完了! Foundation框架使用NSError
类来描述错误。要“返回”其他参数,您的方法将如下所示:
- (NSString *)generateString:(NSMutableArray *)myArray error:(NSError **)error
{
BOOL failed;
// Do some fancy stuff, if the operation fails, failed is true
if (failed == YES) {
if (error != NULL) {
*error = [NSError errorWithDomain:@"your_domain" code:123 userInfo:nil];
}
return nil;
}
return [yourString autorelease];
}
// ...
// Calling your method
NSError *error = nil;
[someObject generateString:someArray error:&error];
请注意两个**
,并且任何NSError
var可能是NULL
而不是nil
(因此您应该在方法的正文中检查这一点)。
答案 1 :(得分:1)
默认方法返回autorelease NSString,我建议使用相同的行为。如果您需要修改结果字符串,可以使用临时字符串。