【问题标题】:Which way to initialize NSString* pointer in class在类中初始化 NSString* 指针的方法
【发布时间】:2011-04-07 11:28:13
【问题描述】:

我在我的班级中使用NSString,并且经常需要将字符串值复制到另一个班级。但我的问题是我应该如何初始化字符串,例如init? (值是类成员,以下调用在 init 中)

value = [NSString stringWithCString:inStrning encoding:NSASCIIStringEncoding];

value = [[NSString alloc] initWithCString:inStrning encoding:NSASCIIStringEncoding];

这里有什么区别?初始化完成时是否释放了在第一次调用中分配的内存? 我使用value 作为assign 属性。使用copy会更好吗?

当我使用某种方法将字符串传递给类时,如何复制字符串呢?示例:

-(id) initWithObjectTypeStr:(NSString*)inTypeStr
{
    ...
    objectTypeStr = [NSString stringWithString:inType];
    //or 
    objectTypeStr = [[NSString alloc] initWithString:inType];
}

objectTypeStr 未定义为属性,因此它具有默认属性(我认为是assign)。

在这种情况下使用的最佳做法是什么?

【问题讨论】:

标签: objective-c nsstring


【解决方案1】:
[NSString alloc] initWithString:@""]

返回一个你拥有的字符串,你必须释放它。

[NSString stringWithString:@""]

返回一个自动释放对象,该对象将被自动释放池释放和清理。

我建议你阅读memory management documentation

【讨论】:

  • 谢谢,明白了很多。当我专注于我的问题阅读 Apple 指南时,它们的可读性更高。
  • 链接现在失效了。
【解决方案2】:

不同之处在于在这种情况下objectTypeStr = [NSString stringWithString:inType]; objectTypeStr 是自动释放的,您不拥有该对象。

而在objectTypeStr = [[NSString alloc] initWithString:inType]; 您拥有该对象的所有权,因为您使用 alloc 或 new 分配它,因此您有责任在使用后释放它

【讨论】:

    猜你喜欢
    • 2011-06-24
    • 1970-01-01
    • 2014-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多