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

问题描述 投票:2回答:2

我在我的课程中使用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
2个回答
2
投票
[NSString alloc] initWithString:@""]

返回您拥有的字符串,您将不得不释放它。

[NSString stringWithString:@""]

返回将由autoreleasepool释放和清理的自动释放对象。

我建议你阅读memory management documentation


1
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.