我在我的类中使用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
)。
在这种情况下使用的最佳做法是什么?
答案 0 :(得分:2)
[NSString alloc] initWithString:@""]
返回您拥有的字符串,您必须将其释放。
[NSString stringWithString:@""]
返回一个autorelease对象,该对象将由autoreleasepool释放并清理。
答案 1 :(得分:1)
不同之处在于objectTypeStr = [NSString stringWithString:inType];
objectTypeStr
是自动发布的,你不拥有该对象。
而在objectTypeStr = [[NSString alloc] initWithString:inType];
你获得对象的所有权,因为你使用alloc或new分配它,所以你有责任在使用后释放它