我在我的课程中使用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
)。
在这种情况下使用的最佳做法是什么?
[NSString alloc] initWithString:@""]
返回您拥有的字符串,您将不得不释放它。
[NSString stringWithString:@""]
返回将由autoreleasepool释放和清理的自动释放对象。
不同的是,在这种情况下,objectTypeStr = [NSString stringWithString:inType];
objectTypeStr
是自动释放的,你不拥有该对象。
在objectTypeStr = [[NSString alloc] initWithString:inType];
中,您获取对象的所有权,因为您使用alloc或new分配它,因此您有责任在使用后释放它