在类中初始化NSString *指针的方法

时间:2011-04-07 11:28:14

标签: objective-c nsstring

我在我的类中使用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)。

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

2 个答案:

答案 0 :(得分:2)

[NSString alloc] initWithString:@""]

返回您拥有的字符串,您必须将其释放。

[NSString stringWithString:@""]

返回一个autorelease对象,该对象将由autoreleasepool释放并清理。

我建议你阅读memory management documentation

答案 1 :(得分:1)

不同之处在于objectTypeStr = [NSString stringWithString:inType]; objectTypeStr是自动发布的,你不拥有该对象。

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