Ios 多个NSString声明和初始化
我是ios开发的新手。我检查了NSString,发现它使用了多种方式,如下所示 1)Ios 多个NSString声明和初始化,ios,objective-c,nsstring,Ios,Objective C,Nsstring,我是ios开发的新手。我检查了NSString,发现它使用了多种方式,如下所示 1) NSString*theString=@“你好” 2) NSString*string1=[NSString stringWithString:@“This is”] 3) NSString*string=[[NSString alloc]init]; 字符串=@“你好” 现在我对以上三种语言感到困惑,想知道它们之间的区别吗?好的,首先,语法@“blah”是一个Objective-C文本,用于创建NSStrin
NSString*theString=@“你好”代码>
2) NSString*string1=[NSString stringWithString:@“This is”]代码>
3) NSString*string=[[NSString alloc]init];
字符串=@“你好”代码>
现在我对以上三种语言感到困惑,想知道它们之间的区别吗?好的,首先,语法@“blah”
是一个Objective-C文本,用于创建NSString。本质上,它是一个字符串
此外,每个语句有两个部分。字符串变量NSString*string
的声明和实例化string=
所以
大多数时候你都会这样做。声明变量并使用objective-c文本进行设置
这增加了一点冗余,你不会真的这样使用它。您可能会将其与子字符串或其他字符串一起使用。实际上,您在这里基本上创建了两个对象。第一个是[nsstringwithstring:]第二个是@“这是”
这有点奇怪。您首先创建一个空字符串@“
,然后将该字符串替换为@“Hello”
。不要这样做。没有意义。你也可以只做第一步,因为结果是一样的
这三种方法都有效,但在这些情况下,最好使用第一种方法。1)和2)是一样的。没有区别。[NSString stringWithString:str]不执行任何操作,如果str已经不可变,则返回str。通过
3) 创建空字符串指针。使用“=”分配此字符串后,与1)的方式相同,并将内存分配给NSString。您可以在3)中查看此NSString指针,您可以看到指针已更改:
NSString *string =[[NSString alloc]init];
printf("\n string_1-> = %p\n", string );
string = @"Hello";
printf("\n string_2-> = %p\n", string );
是的,这三种方法都是创建字符串的方法……我试着一个接一个地解释你们
您必须记住,在Objective-c中,字符串由@“
表示。
无论什么双引号都是字符串,例如“Hello”
是string
@“
基本上是创建NSString
的文本
NSString*theString=@“你好”代码>
编辑:
在此语句中,我们创建了一个NSString
常量Objective-C
string常量在编译时创建,并存在于程序的整个执行过程中
2. NSString *string1 = [NSString stringWithString:@"This is"];
在这个语句中,我们再次创建了NSString
的autorelease
对象,但这里的幻灯片与第一种情况不同。这里我们使用另一个NSString
对象来创建NSString
的新autorelease
对象。因此,当我们已经有NSString
对象,并且我们想要另一个具有类似内容的NSString
对象时,通常使用stringWithString
方法
3. NSString *string =[[NSString alloc]init];
string =@"Hello";
在这里,在第一条语句中,您正在创建一个您拥有的NSString
对象,并且在处理完该对象后,您有责任释放它(在非ARC代码中)。
第二条语句类似于案例1,通过创建字符串对象的字符串文字。
但当您将这两条语句放在一起时,会导致内存泄漏
(在非ARC代码中),因为在语句一中,您正在为新字符串对象分配&内存,而在第二个语句之后,您又将新字符串对象分配给同一字符串引用 @trojanfoe您能详细说明一下吗?字符串
被创建(空),然后用一个常量字符串重新初始化。这是一个低效版本的1)。这是一个非常不同的解释比“是坏的”。特别是当你和一个新手谈论iOS开发的时候。我希望我已经弥补了这个不足。我不会说它完全坏了。很明显,他是有意这么说的,并问它有什么作用。我认为OP给人的印象是,这样做是可以的,但他不应该使用它。“你没有这样做。@特洛伊敌人在我的答案中添加了一位。@”“或@“字符串”什么时候开始创建自动删除的内容了?那是胡说八道@“字符串”是指向与应用程序寿命相同且永远不会释放的NSString对象的指针。@gnasher729您是对的,@“
不会创建任何“自动释放”。它们被称为NSString
常量,存在于整个程序中。谢谢你指出这一点,我编辑了我的答案。