的理想方式是不是真的需要創建一個使用下面提及的格式字符串時ARC啓用創建的NSString
NSString *string =[[NSString alloc]init];
string [email protected]"Hello";
或者是理想的使用下文提到的格式使用
NSString *theString = @"hello";
NSString *string1 = [NSString stringWithString:@"hello"];
的理想方式是不是真的需要創建一個使用下面提及的格式字符串時ARC啓用創建的NSString
NSString *string =[[NSString alloc]init];
string [email protected]"Hello";
或者是理想的使用下文提到的格式使用
NSString *theString = @"hello";
NSString *string1 = [NSString stringWithString:@"hello"];
永遠不需要分配init一個NSString
(或者至少它基本上是無用的),特別是如果您要立即將該變量賦值給另一個字符串。這隻會導致第一個字符串被破壞。
選項1)很好。
選項2)是壞的,你已經有了一個字符串,所以你並不需要分配單元另一個字符串實例。
NSString *string =[[NSString alloc]init];
string [email protected]"Hello";
這是完全愚蠢的,對於一個字符串或其他任何東西。您正在第一行創建一個字符串並將其扔到第二行。如果你不使用ARC,這將是一個泄漏。
NSString *string =[[NSString alloc]init];
string [email protected]"Hello";
有兩個問題與上面的代碼:
你正在創建一個新的空字符串,並將其分配給string
,然後分配不同字符串對象string
。第二行不會更改您在第一行創建的字符串的內容;它改變了什麼string
指向。因此,第一行的唯一有用效果是它聲明瞭string
變量。
NSString
是代表不可變的字符串類。也就是說,一旦你創建NSString
的實例,你就不能改變它。創建它時,必須提供不可變對象的內容。所以,當你說[[NSString alloc] init]
,你會得到一個空字符串,就永遠不能成爲非空,和你正在試圖做的,這不是你想要的東西判斷。
因此,您需要決定是否要包含「Hello」的不可變字符串或稍後可以更改的可變字符串。在前一種情況下,你可以做這樣的:
NSString *string = @"Hello";
或類似:
NSString *string = [NSString stringWithString:@"Hello"];
或類似:
NSString *string = [[NSString alloc] initWithString:@"Hello"];
所有這些都是有效的,但第一個是最短的並且最清楚。如果你想有一個可變的字符串,你可以說:
NSMutableString *string = [NSMutableString string];
[string setString:@"Hello"];
一個較短的方式做同樣的事情是:
NSMutableString *string = [@"Hello" mutableCopy];
做初始化之前的任務是,呃,「愚蠢的」。同樣,使用'[NSString stringWithString:@「hello」]'是「愚蠢的」,除非在非常有限的情況下。 –