0

我在 Objective-C 中编写了一个方法,它基于 NSMutableArray 输入返回一个字符串。我不打算让调用者修改字符串,但也不在乎。该方法的当前签名如下:

- (NSMutableString *) generateString:(NSMutableArray *)myArray

该项目目前是一个命令行基础工具,用于学习其中的技巧,但这最终会出现在 iPhone 应用程序中。

我的问题是:

  1. 返回 NSString 会更谨慎吗?

2) 当返回 NSMutableString 时,我应该使用 autorelease 吗?如果您建议我返回一个 NSString ,那修改返回它如何?

3)如果我还想返回一个错误对象来标识是否发生了错误,也许是一个枚举和一个字符串,在这种情况下所有权如何工作?该方法不称为 alloc、new 或 copy,那么调用者怎么知道呢?除了上述方法中的字符串之外,我如何返回分配的错误对象?

谢谢!

4

2 回答 2

5
  1. NSString在大多数情况下,我会返回一个。它的内存占用略小,如果调用者需要一个可变副本,创建一个只是一种方法:mutableCopy.
  2. 您不仅应该而且必须自动释放NSStringNSMutableString您的方法返回(至少如果您像示例中那样命名您的方法)!内存管理编程指南列出了您必须遵循的规则以避免完全混乱并深入解释所有内容。所以读吧!
  3. 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];
    

请注意这两个**,并且任何NSErrorvar 可能是也可能NULL不是nil(因此您应该在方法的主体中检查这一点)。

于 2011-01-11T19:21:13.703 回答
1

默认情况下,方法返回自动释放 NSString,我建议使用相同的行为。如果您需要修改结果字符串,您可以使用临时字符串。

于 2011-01-11T19:11:12.210 回答