ios學習筆記之Object C 字串

2021-06-18 23:25:54 字數 2996 閱讀 7352

在object-c中,字串的宣告是:

nsstring *astring; 

astring並不真正包含乙個字串物件—它是指向記憶體中字串物件的指標。(和c語言中,用指標指向字串的宣告類似);

nsstring *a0 =[[nsstring alloc]initwithformat:@"kevin"]; 

//方法一

nsstring *a1 =[[nsstring alloc]initwithstring:@"kevin"]; 

//方法二

nsstring *a2= @"kevin"; 

//方法三

nsstring

*a3 = [[

nsstring

alloc

]initwithformat

:@"kevin"

]; 區別1:方法一用format進行字串的宣告,方法二用string方法宣告,第三種方法和用string宣告基本一致,但是不初始化記憶體空間,方法一和方法二中,a0和a1使用結束後,需要進行記憶體釋放,但是a2不需要進行記憶體釋放。

區別2:用format初始化的字串,需要初始化一段動態記憶體空間,如:0x6a42a40,而用string宣告的字串,初始化的是常量記憶體區,如:0x46a8,常量記憶體區的位址,只要值相同,占用的位址空間是一致的。所以a1和a2的位址一致,但是a0和a3的位址不一致。

可以使用format,以整型為例,如:

int i = 100;

nsstring

*b = [[

nsstring

alloc

]initwithformat

:@"%d",i

]; //如果是float型,可以用%f

nslog

(@"b =%@"

,[bdescription

]);結果輸出:b =100 

用length求字串長度,如:

nslog(@"a1 =%d",a1.length);

結果輸出a1 = 5

注意這裡和c語言的不同,c語言中,字串的結束是以'\0'結束,而oc不是。

nsstring

*a4= @"2012"; 

nslog(@"c = %@",c);

結果輸出:c = kevin2012

求子字串,有三種方式:

1、substringfromindex:x  

//從索引x開始到結束,包含索引x指向的值(索引的理解有點像c語言中陣列的下標)

2、substringtoindex:x  

//從開始到索引x之前結束,不包含索引x指向的值

3、substringwithrange  

//定義乙個區間,有開始位置和擷取長度

如下:

nsstring *d =[a1 substringfromindex:1];

nsstring *e =[a1 substringtoindex:3];

nslog(@"d = %@,e =%@",d,e);

結果輸出為:d = evin,e = kev

substringwithrange先定義區間,如下:

nsrange r = ; 

//從索引2開始,擷取3個長度

nsstring *f = [csubstringwithrange:r];

nslog(@"f = %@",f);

結果輸出為:f = vin

int j =[a4 intvalue];  

//如果字串由數字開頭,轉化為起始的數字,否則轉化為0

nslog(@"j = %d",j);

還可以轉化為float,bool型,查文件得知,如果轉化為bool型,returns yes on encountering one of "y", "y","t", "t", or a digit 1-9—the method ignores any trailingcharacters. returns no if the receiver doesn』t begin with a validdecimal text representation of anumber.(由y,y,t,t,1-9開始的字串轉化為yes,其餘的為no)

a0 isequal:(id)   //a

和乙個物件進行判斷,比較的是位址

,如果發現傳進來的都是字串,直接比較字串大小,若相等,就返回

yes,如果不是字串,就進行位址比較

a0 isequaltostring:b  

//a和字串

b進行比較,比較字串大小

如下:bool c1 = [@"12"isequal:@"12"];

bool c2 = [@"12"isequaltostring:@"12"];

bool c3 = [a0isequaltostring:a1];

nslog(@"c1 = %d,c2 = %d,c3 =%d",c1,c2,c3);

結果輸出為:c1 = 1,c2 = 1,c3 = 0;

使用compare:公升序返回

-1,相等返回

0,降序返回1

如下:nsstring *k1 = @"abc";

nsstring *k2 = @"abc";

nscomparisonresult r1 = [k1compare:k2];

nslog(@"r1 = %d",r1);

結果輸出為r1 = -1

轉化字串大小寫:

lowercasestring:  

//轉化成小寫

uppercasestring:  

//轉化成大寫

如下:nsstring *k3 = [k1lowercasestring]; 

nsstring *k4 = [d1uppercasestring]; 

nslog(@"k3 = %@,k4 =%@",k3,k4);

結果輸出為:k3 = abc,k4 =abc

ios學習筆記之Object C 集合

obejct c中包含了三種集合,分別是 陣列 字典和集 set 陣列和c語言中的陣列相似,但是oc中的陣列只能儲存物件,不能儲存基本資料型別,如int float enum struct等,也不能儲存nil。它也提供了編制好的索引物件,可以通過制定索引找到要檢視的物件。包含可變陣列 nsmutab...

iOS開發 Object C學習之結構體使用

前言 定義 結構體並不是定義乙個變數,而是定義了種資料型別。結構體作用 結構體和其他型別基礎資料型別一樣,例如int型別,char型別 只不過結構體可以做成你想要的資料型別。以方便日後的使用。在實際專案中,結構體是大量存在的。研發人員常使用結構體來封裝一些屬性來組成新的型別。由於c語言內部程式比較簡...

iOS開發 Object C學習之結構體使用

前言 定義結構體並不是定義乙個變數,而是定義了種資料型別。結構體作用 結構體和其他型別基礎資料型別一樣,例如int型別,char型別 只不過結構體可以做成你想要的資料型別。以方便日後的使用。在實際專案中,結構體是大量存在的。研發人員常使用結構體來封裝一些屬性來組成新的型別。由於c語言內部程式比較簡單...