gpt4 book ai didi

objective-c - 从方法返回 NSString 时的内存管理和所有权

转载 作者:行者123 更新时间:2023-12-03 17:29:44 26 4
gpt4 key购买 nike

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

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

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

我的问题是:

  1. 返回 NSString 会更谨慎吗?

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

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

谢谢!

最佳答案

  1. 在大多数情况下我会返回一个 NSString。它的内存占用稍小,如果调用者需要一个可变副本,只需一个方法即可创建一个:mutableCopy
  2. 你不仅应该而且必须自动释放你的方法返回的NSStringNSMutableString(至少如果你像下面这样命名你的方法的话)例子)! Memory Management Programming Guide列出了您必须遵守的规则,以避免完全困惑,并深入解释了所有内容。所以请阅读它!
  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];

注意两个 ** 并且任何 NSError var 可能是 NULL 而不是 nil (所以你应在方法主体中检查这一点)。

关于objective-c - 从方法返回 NSString 时的内存管理和所有权,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4661544/

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