在ios中初始化字符串变量的两种方式有什么区别(,adv/disadv)?
NSString *var = @"value"
和NSString *var =[ [NSString alloc] initWithString:@"value"]
编码:
NSString *var = @"value";
NSCFConstantString
创建一个由编译器创建并作为程序数据的一部分存储的实例。出于内存管理的目的,它不响应retain
或者release
可以有效地被忽略。
但是代码:
NSString *var =[ [NSString alloc] initWithString:@"value"];
分配一个NSString
对象并使用常量字符串的内容对其进行初始化@"value"
。release
当不再需要但不能更新(它是不可变的)时,它必须是d ,因此与第一段代码相比几乎没有提供什么。
@"value" 返回一个自动释放的字符串,但 initWithString: 返回一个保留的字符串,需要释放。如果您使用的是 ARC,则没有区别,因为它会为您释放它。