Objective-C-2.0程序設(shè)計-第15章-數(shù)字-字符串和集合_第1頁
Objective-C-2.0程序設(shè)計-第15章-數(shù)字-字符串和集合_第2頁
Objective-C-2.0程序設(shè)計-第15章-數(shù)字-字符串和集合_第3頁
Objective-C-2.0程序設(shè)計-第15章-數(shù)字-字符串和集合_第4頁
Objective-C-2.0程序設(shè)計-第15章-數(shù)字-字符串和集合_第5頁
已閱讀5頁,還剩90頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、第第15章章 數(shù)字,字符串和集合數(shù)字,字符串和集合 武漢大學(xué)國際軟件學(xué)院Objective-C 2.0程序設(shè)計目錄目錄v15.1 數(shù)字對象數(shù)字對象v15.2 字符串對象字符串對象v15.3 數(shù)組對象數(shù)組對象v15.4 同步同步AddressCard方法方法v15.5 詞典對象詞典對象v15.6 集合對象集合對象武漢大學(xué)國際軟件學(xué)院Objective-C 2.0程序設(shè)計15.1 數(shù)字對象數(shù)字對象v到目前討論過的所有數(shù)字?jǐn)?shù)據(jù)類型,如到目前討論過的所有數(shù)字?jǐn)?shù)據(jù)類型,如int型、型、float型和型和long型都是型都是Objective-C語言中的基本語言中的基本數(shù)據(jù)類型,也就是說,它們都不是對象。

2、數(shù)據(jù)類型,也就是說,它們都不是對象。v有時需要作為對象使用這些值。有時需要作為對象使用這些值。 例如,使用例如,使用Foundation的對象的對象NSArray,可以設(shè)置一個可以設(shè)置一個用于存儲值的數(shù)組。這些值必須是對象,因此不能將用于存儲值的數(shù)組。這些值必須是對象,因此不能將任何基本數(shù)據(jù)類型直接存儲到這些數(shù)組中。要存儲任任何基本數(shù)據(jù)類型直接存儲到這些數(shù)組中。要存儲任何基本數(shù)據(jù)類型,可以使用何基本數(shù)據(jù)類型,可以使用NSNumber類根據(jù)這些數(shù)類根據(jù)這些數(shù)據(jù)類型來創(chuàng)建對象。據(jù)類型來創(chuàng)建對象。武漢大學(xué)國際軟件學(xué)院Objective-C 2.0程序設(shè)計15.1 數(shù)字對象數(shù)字對象Program 15

3、.1/ Working with Numbers#import #import #import #import int main (int argc, char *argv)NSAutoreleasePool * pool = NSAutoreleasePool alloc init;NSNumber *myNumber, *floatNumber, *intNumber;NSInteger myInt;/ integer valueintNumber = NSNumber numberWithInteger: 100;myInt = intNumber integerValue;NSLog

4、(”%li”, (long) myInt);/ long valuemyNumber = NSNumber numberWithLong: 0 xabcdef;NSLog (”%lx”, myNumber longValue);武漢大學(xué)國際軟件學(xué)院Objective-C 2.0程序設(shè)計15.1 數(shù)字對象數(shù)字對象/ char valuemyNumber = NSNumber numberWithChar: X;NSLog (”%c”, myNumber charValue);/ float valuefloatNumber = NSNumber numberWithFloat: 100.00;N

5、SLog (”%g”, floatNumber floatValue);/ doublemyNumber = NSNumber numberWithDouble: 12345e+15;NSLog (”%lg”, myNumber doubleValue);/ Wrong access hereNSLog (”%i”, myNumber integerValue);/ Test two Numbers for equalityif (intNumber isEqualToNumber: floatNumber = YES)NSLog (”Numbers are equal”);武漢大學(xué)國際軟件學(xué)

6、院Objective-C 2.0程序設(shè)計15.1 數(shù)字對象數(shù)字對象elseNSLog (”Numbers are not equal”);/ Test if one Number is second Numberif (intNumber compare: myNumber = NSOrderedAscending)NSLog (”First number s less than second”);pool drain;return 0;Program 15.1 Output100abcdefX1001.2345e+190Numbers are equalFirst number is les

7、s than second武漢大學(xué)國際軟件學(xué)院Objective-C 2.0程序設(shè)計15.1 數(shù)字對象數(shù)字對象 自動釋放池一覽自動釋放池一覽v下面這行代碼為分配給下面這行代碼為分配給pool的自動釋放池的自動釋放池(autoreleasepool)預(yù)留了內(nèi)存空間:預(yù)留了內(nèi)存空間: NSAutoreleasePool *pool = NSAutoreleasePool alloc init;v自動釋放池可以自動釋放添加到該池中的對象所自動釋放池可以自動釋放添加到該池中的對象所使用的內(nèi)存。向?qū)ο蟀l(fā)送一條使用的內(nèi)存。向?qū)ο蟀l(fā)送一條autorelease 消息時,消息時,就將該對象放到這個池中。釋放這

8、個池時,添加到就將該對象放到這個池中。釋放這個池時,添加到該池的所有對象也會一起釋放。該池的所有對象也會一起釋放。武漢大學(xué)國際軟件學(xué)院Objective-C 2.0程序設(shè)計15.1 數(shù)字對象數(shù)字對象v 一般來說,無需擔(dān)心需要釋放一般來說,無需擔(dān)心需要釋放Foundation方法返回的方法返回的對象。使用完對象。使用完alloc方法顯式地創(chuàng)建的任何對象之后,仍方法顯式地創(chuàng)建的任何對象之后,仍然需要釋放它們。然需要釋放它們。v 代碼清單代碼清單15-1中,中,NSNumber類包含多個方法,它們類包含多個方法,它們允許使用初始值創(chuàng)建允許使用初始值創(chuàng)建NSNumber對象。對象。 intNumber

9、 = NSNumber numberWithInteger: 100; 創(chuàng)建了一個值為創(chuàng)建了一個值為100的整數(shù)對象的整數(shù)對象v 從從NSNumber對象獲得的值必須和存儲在其中的值類對象獲得的值必須和存儲在其中的值類型一致。型一致。 intNumber integerValue 檢索存儲在檢索存儲在intNumber中的整型值,并將其存儲在中的整型值,并將其存儲在NSInteger變變量量myInt中。中。 NSInteger不是一個對象,而是基本數(shù)據(jù)類型的不是一個對象,而是基本數(shù)據(jù)類型的typedef。它被。它被typedef成成64位的位的long或者或者32位的位的int。存在一個類似

10、的。存在一個類似的NSInteger typedef用于處理程序中那些為簽名的整數(shù)用于處理程序中那些為簽名的整數(shù)。武漢大學(xué)國際軟件學(xué)院Objective-C 2.0程序設(shè)計15.1 數(shù)字對象數(shù)字對象v在在NSLog調(diào)用中,將調(diào)用中,將NSInteger轉(zhuǎn)換為轉(zhuǎn)換為long并使用格式字符并使用格式字符%li,以確保值可以傳遞并正確,以確保值可以傳遞并正確顯式。顯式。v對于每一個基本值,類方法都為它分配了一個對于每一個基本值,類方法都為它分配了一個NSNumber對象,并將其設(shè)置為指定的值。這對象,并將其設(shè)置為指定的值。這些方法以些方法以numberWith開始,之后是該方法的開始,之后是該方法的

11、類型,如類型,如numberWithLong:,numberWithFloat:等。此外,可以使用實例等。此外,可以使用實例方法為以前分配的方法為以前分配的NSNumber對象設(shè)置指定的對象設(shè)置指定的值。這些都是以值。這些都是以initWith開頭的。開頭的。武漢大學(xué)國際軟件學(xué)院Objective-C 2.0程序設(shè)計15.1 數(shù)字對象數(shù)字對象武漢大學(xué)國際軟件學(xué)院Objective-C 2.0程序設(shè)計15.1 數(shù)字對象數(shù)字對象v應(yīng)該注意不能重新初始化前面創(chuàng)建的應(yīng)該注意不能重新初始化前面創(chuàng)建的NSNumber對象的對象的值。值。 例如,不能使用下面的語句設(shè)置存儲在例如,不能使用下面的語句設(shè)置存儲在

12、NSNumber對對象象myNumber中的整數(shù):中的整數(shù):myNumber :initwithInt: 1000v當(dāng)程序執(zhí)行時,這條語句將產(chǎn)生一條錯誤。所有數(shù)宇對象當(dāng)程序執(zhí)行時,這條語句將產(chǎn)生一條錯誤。所有數(shù)宇對象都必須是新創(chuàng)建的,這意味著必須對都必須是新創(chuàng)建的,這意味著必須對NSNumber類調(diào)用表類調(diào)用表15-1第一列列出一個方法,或者對第一列列出一個方法,或者對alloc方法的結(jié)果調(diào)用第方法的結(jié)果調(diào)用第二列列出的方法中,如下所示:二列列出的方法中,如下所示: myNumber = NSNumber alloc initWithint: 1000;v基于前面的討論,如果使用這種方式創(chuàng)建基

13、于前面的討論,如果使用這種方式創(chuàng)建myNumber,則則在使用完之后,你需要使用以下語句來釋放它:在使用完之后,你需要使用以下語句來釋放它: myNumber release;武漢大學(xué)國際軟件學(xué)院Objective-C 2.0程序設(shè)計 15.2 字符串對象字符串對象vFoundation框架支持一個名為框架支持一個名為NSString的類,的類,它用于處理字符串對象。它用于處理字符串對象。v然而然而C-string由由char字符組成,字符組成,NSString對象對象是由是由unichar字符組成。字符組成。Unichar字符是符合字符是符合Unicode標(biāo)準(zhǔn)的多字節(jié)字符,可以處理包含數(shù)百萬

14、標(biāo)準(zhǔn)的多字節(jié)字符,可以處理包含數(shù)百萬字符的宇符集。字符的宇符集。v不必?fù)?dān)心字符串的內(nèi)部表示,因為不必?fù)?dān)心字符串的內(nèi)部表示,因為NSString類類已經(jīng)自動地做了這些工作。使用該類的方法,可以已經(jīng)自動地做了這些工作。使用該類的方法,可以更容易地開發(fā)能夠本地化的應(yīng)用程序。更容易地開發(fā)能夠本地化的應(yīng)用程序。v要使用要使用Objective-C語言創(chuàng)建一個常字符串對象,語言創(chuàng)建一個常字符串對象,需要在字符串開頭放置一個需要在字符串開頭放置一個字符字符 “programming is fun” 創(chuàng)建一個常量字符串創(chuàng)建一個常量字符串武漢大學(xué)國際軟件學(xué)院Objective-C 2.0程序設(shè)計 15.2 字符

15、串對象字符串對象vNSConstantString類是字符串對象類是字符串對象NSString類的子類。類的子類。v程序中使用字符串對象,要包括程序中使用字符串對象,要包括 #import 武漢大學(xué)國際軟件學(xué)院Objective-C 2.0程序設(shè)計 15.2 字符串對象字符串對象vNSLog函數(shù)函數(shù)代碼清單代碼清單15-2,展示了如何定義,展示了如何定義NSString對象,對象,并向其指派一個初始化值。還展示了如何使用格式并向其指派一個初始化值。還展示了如何使用格式字符字符來顯示來顯示NSString對象。對象。Program 15.2#import #import #import int

16、main (int argc, char *argv)NSAutoreleasePool * pool = NSAutoreleasePool alloc init;NSString *str = ”Programming is fun”;NSLog (”%”, str);pool drain;return 0;武漢大學(xué)國際軟件學(xué)院Objective-C 2.0程序設(shè)計 15.2 字符串對象字符串對象 Program 15.2 OutputProgramming is funIn the lineNSString *str = ”Programming is fun”;v常量字符串對象常量字符

17、串對象Programming is fun被賦值給被賦值給NSString變量變量str。然后使用。然后使用NSLog來顯示它的值。來顯示它的值。vNSLog格式字符格式字符不僅能顯示不僅能顯示NSString對象,而且對象,而且可以顯示其他對象。例如,給定以下語句:可以顯示其他對象。例如,給定以下語句: NSNunber *intNumber = NSNumber numberWithlnteger:100;vNSLog調(diào)用調(diào)用NSLOG”%”,intNumber;將產(chǎn)生將產(chǎn)生如下輸出:如下輸出:100武漢大學(xué)國際軟件學(xué)院Objective-C 2.0程序設(shè)計 15.2 字符串對象字符串對象

18、v格式字符格式字符%能夠顯式數(shù)組、字典和集合的全部能夠顯式數(shù)組、字典和集合的全部內(nèi)容。通過重載類所繼承的方法,還可以使用這些內(nèi)容。通過重載類所繼承的方法,還可以使用這些格式字符顯式自己的類對象。如果不重載方法,格式字符顯式自己的類對象。如果不重載方法,NSLog僅顯式類名和該對象在內(nèi)存中的地址。僅顯式類名和該對象在內(nèi)存中的地址。武漢大學(xué)國際軟件學(xué)院Objective-C 2.0程序設(shè)計15.2 字符串對象字符串對象可變對象與不可變對象可變對象與不可變對象v通過編寫如下語句:通過編寫如下語句:Programming is fun創(chuàng)建字符串對象時,就創(chuàng)建了一個內(nèi)容不可創(chuàng)建字符串對象時,就創(chuàng)建了一個

19、內(nèi)容不可更改的對象。這稱作不可變對象。更改的對象。這稱作不可變對象。vNSString類處理不可變字符串。類處理不可變字符串。v但是經(jīng)常需要處理字符串并更改字符串中的字符。但是經(jīng)常需要處理字符串并更改字符串中的字符。例如,可能想從字符串中刪除一些字符或?qū)ψ址?,可能想從字符串中刪除一些字符或?qū)ψ址畧?zhí)行搜索替換操作。這些類型的字符串是使用執(zhí)行搜索替換操作。這些類型的字符串是使用NSMutableString類處理的。類處理的。武漢大學(xué)國際軟件學(xué)院Objective-C 2.0程序設(shè)計15.2 字符串對象字符串對象v代碼清單代碼清單15-3顯示在程序中處理不可變字符串的基本方顯示在程序中處理

20、不可變字符串的基本方式。式。Program 15.3/ Basic String Operations#import #import #import int main (int argc, char *argv)NSAutoreleasePool *pool = NSAutoreleasePool alloc init;NSString *str1 = ”This is string A”;NSString *str2 = ”This is string B”;NSString *res;NSComparisonResult compareResult;/ Count the number o

21、f charactersNSLog (”Length of str1: %lu”, str1 length);/ Copy one string to anotherres = NSString stringWithString: str1;NSLog (”copy: %”, res);武漢大學(xué)國際軟件學(xué)院Objective-C 2.0程序設(shè)計15.2 字符串對象字符串對象/ Copy one string to the end of anotherstr2 = str1 stringByAppendingString: str2;NSLog (”Concatentation: %”, str

22、2);/ Test if 2 strings are equalif (str1 isEqualToString: res = YES)NSLog (”str1 = res”);elseNSLog (”str1 != res”);/ Test if one string is than anothercompareResult = str1 compare: str2;if (compareResult = NSOrderedAscending)NSLog (”str1 str2”);武漢大學(xué)國際軟件學(xué)院Objective-C 2.0程序設(shè)計15.2 字符串對象字符串對象/ Convert a

23、 string to uppercaseres = str1 uppercaseString;NSLog (”Uppercase conversion: %s”, res UTF8String);/ Convert a string to lowercaseres = str1 lowercaseString;NSLog (”Lowercase conversion: %”, res);NSLog (”O(jiān)riginal string: %”, str1);pool drain;return 0;Program 15.3 OutputLength of str1: 16Copy: This is

24、 string AConcatentation: This is string AThis is string Bstr1 = resstr1 str2Uppercase conversion: THIS IS STRING ALowercase conversion: this is string aOriginal string: This is string A武漢大學(xué)國際軟件學(xué)院Objective-C 2.0程序設(shè)計15.2 字符串對象字符串對象v語句語句res = NSString stringWithString: str1;展示了如何使用另一個字符串的內(nèi)容復(fù)制來生成一個新的字展示

25、了如何使用另一個字符串的內(nèi)容復(fù)制來生成一個新的字符串。結(jié)果符串。結(jié)果NSString對象被賦值給對象被賦值給res,然后顯式以驗證,然后顯式以驗證結(jié)果。即結(jié)果。即str1和和res指向兩個不同的字符串對象。指向兩個不同的字符串對象。vstringByAppendingString:方法可以用來連接兩個方法可以用來連接兩個字符串。所以,表達(dá)式字符串。所以,表達(dá)式 str1 stringByAppendingString: str2 創(chuàng)建了一個新對象,這個對象由創(chuàng)建了一個新對象,這個對象由str1之后是之后是str2的字的字符組成,返回結(jié)果。這項操作沒有改變原字符串對象符組成,返回結(jié)果。這項操作沒

26、有改變原字符串對象str1和和str2。visEqualToString:方法來檢測兩個字符串是否相等。方法來檢測兩個字符串是否相等。uppercaseString和和lowercaseString方法分別將字方法分別將字符串轉(zhuǎn)換成大和小寫字符,該操作并沒有改變原字符串。符串轉(zhuǎn)換成大和小寫字符,該操作并沒有改變原字符串。武漢大學(xué)國際軟件學(xué)院Objective-C 2.0程序設(shè)計15.2 字符串對象字符串對象v代碼清單代碼清單15-4舉例說明額外的字符串處理方法。舉例說明額外的字符串處理方法。這些方法允許你提取字符串中的子字符串,并能夠這些方法允許你提取字符串中的子字符串,并能夠在一個字符串中搜

27、索另一個字符串。在一個字符串中搜索另一個字符串。Program 15.4/ Basic String Operations Continued#import #import #import int main (int argc, char *argv)NSAutoreleasePool *pool = NSAutoreleasePool alloc init;NSString *str1 = ”This is string A”;NSString *str2 = ”This is string B”;NSString *res;NSRange subRange;武漢大學(xué)國際軟件學(xué)院Object

28、ive-C 2.0程序設(shè)計15.2 字符串對象字符串對象/ Extract first 4 chars from stringres = str1 substringToIndex: 3;NSLog (”First 3 chars of str1: %”, res);/ Extract chars to end of string starting at index 6res = str1 substringFromIndex: 5;NSLog (”Chars from index 5 of str1: %”, res);/ Extract chars from index 8 through

29、 13 (6 chars)res = str1 substringFromIndex: 8 substringToIndex: 6;NSLog (”Chars from index 8 through 13: %”, res);/ An easier way to do the same thingres = str1 substringWithRange: NSMakeRange (8, 6);NSLog (”Chars from index 8 through 13: %”, res);/ Locate one string inside anothersubRange = str1 ra

30、ngeOfString: ”string A”;NSLog (”String is at index %lu, length is %lu”,subRange.location, subRange.length);subRange = str1 rangeOfString: ”string B”;if (subRange.location = NSNotFound)NSLog (”String not found”);武漢大學(xué)國際軟件學(xué)院Objective-C 2.0程序設(shè)計15.2 字符串對象字符串對象elseNSLog (”String is at index %lu, length is

31、 %lu”,subRange.location, subRange.length);pool drain;return 0;Program 15.4 OutputFirst 3 chars of str1: ThiChars from index 5 of str1: is string AChars from index 8 through 13: stringChars from index 8 through 13: stringString is at index 8, length is 8String not found武漢大學(xué)國際軟件學(xué)院Objective-C 2.0程序設(shè)計15

32、.2 字符串對象字符串對象vsubstringIndex:方法返回一個子字符串,它包栝首字符直到執(zhí)行的索引數(shù),但是不包括這個字符。vsubstringFromlndex:方法返回了一個子字符串,它從接收者的指定索引的字符開始,直到字符串的結(jié)尾。vsubstringWithRange:方法它接受了一個范圍,并返回指定范圍的字符。特殊函數(shù)NSMakeRangs根據(jù)其參數(shù)創(chuàng)建了一個范圍,并返回該結(jié)果。這個結(jié)果可以作為substringWithRange:方法的參數(shù)。v在另一個字符串中查找一個字符串,可以使用rangeOfString:方法。找到 了指定的字符串,則返回的范圍指定找到它的位置,如果沒有

33、找到這個字符串, 則返回范圍的location成員被設(shè)為NSNotFound。武漢大學(xué)國際軟件學(xué)院Objective-C 2.0程序設(shè)計15.2 字符串對象字符串對象v可變字符串可變字符串vMSMutableString類可以用來創(chuàng)建可以更改類可以用來創(chuàng)建可以更改字符的字符串對象。因為該類是字符的字符串對象。因為該類是NSString類的子類的子類,所以可以使用類,所以可以使用NSString類的所有方法。類的所有方法。v任一可變或不可變字符串對象在程序執(zhí)行期間,任一可變或不可變字符串對象在程序執(zhí)行期間,總是可以被設(shè)為完全不同的字符串對象??偸强梢员辉O(shè)為完全不同的字符串對象。武漢大學(xué)國際軟件學(xué)

34、院Objective-C 2.0程序設(shè)計15.2 字符串對象字符串對象v考慮如下代碼考慮如下代碼: strl = This is a string; Strl = Strl substnrigFromlndex: 5;v在這個例子中,首先將在這個例子中,首先將str1設(shè)置為一個常量字符設(shè)置為一個常量字符串對象。后來在程序中將其設(shè)為一個子字符串。在串對象。后來在程序中將其設(shè)為一個子字符串。在這個例子中,這個例子中,str1可以聲明為可變的字符串對象,可以聲明為可變的字符串對象,也可以聲明為不可變的字符串對象。也可以聲明為不可變的字符串對象。武漢大學(xué)國際軟件學(xué)院Objective-C 2.0程序設(shè)

35、計15.2 字符串對象字符串對象v代碼清單代碼清單15-5展示了處理程序中可變字符串的展示了處理程序中可變字符串的幾種方式。幾種方式。Program 15.5/ Basic String Operations - Mutable Strings#import #import #import int main (int argc, char *argv)NSAutoreleasePool * pool = NSAutoreleasePool alloc init;NSString *str1 = ”This is string A”;NSString *search, *replace;NSMu

36、tableString *mstr;NSRange substr;/ Create immutable string from nonmutablemstr = NSMutableString stringWithString: str1;NSLog (”%”, mstr);武漢大學(xué)國際軟件學(xué)院Objective-C 2.0程序設(shè)計15.2 字符串對象字符串對象/ Insert charactersmstr insertString: ” mutable” atIndex: 7;NSLog (”%”, mstr);/ Effective concatentation if insert at

37、endmstr insertString: ” and string B” atIndex: mstr length;NSLog (”%”, mstr);/ Or can use appendString directlymstr appendString: ” and string C”;NSLog (”%”, mstr);/ Delete substring based on rangemstr deleteCharactersInRange: NSMakeRange (16, 13);NSLog (”%”, mstr);/ Find range first and then use it

38、 for deletionsubstr = mstr rangeOfString: ”string B and “;if (substr.location != NSNotFound) mstr deleteCharactersInRange: substr;NSLog (”%”, mstr);武漢大學(xué)國際軟件學(xué)院Objective-C 2.0程序設(shè)計15.2 字符串對象字符串對象/ Set the mutable string directlymstr setString: ”This is string A”;NSLog (”%”, mstr);/ Now lets replace a r

39、ange of chars with anothermstr replaceCharactersInRange: NSMakeRange(8, 8)withString: ”a mutable string”;NSLog (”%”, mstr);/ Search and replacesearch = ”This is”;replace = ”An example of”;substr = mstr rangeOfString: search;if (substr.location != NSNotFound) mstr replaceCharactersInRange: substrwith

40、String: replace;NSLog (”%”, mstr);武漢大學(xué)國際軟件學(xué)院Objective-C 2.0程序設(shè)計15.2 字符串對象字符串對象/ Search and replace all occurrencessearch = ”a”;replace = ”X”;substr = mstr rangeOfString: search;while (substr.location != NSNotFound) mstr replaceCharactersInRange: substrwithString: replace;substr = mstr rangeOfString:

41、 search;NSLog (”%”, mstr);pool drain;return 0;武漢大學(xué)國際軟件學(xué)院Objective-C 2.0程序設(shè)計15.2 字符串對象字符串對象Program 15.5 OutputThis is string AThis is mutable string AThis is mutable string A and string BThis is mutable string A and string B and string CThis is mutable string B and string CThis is mutable string CThi

42、s is string AThis is a mutable stringAn example of a mutable stringAn exXmple of X mutXble string武漢大學(xué)國際軟件學(xué)院Objective-C 2.0程序設(shè)計vNSMutableString *mstr;將將mstr變量聲明為一個變變量聲明為一個變量,用來存儲在程序執(zhí)行過程中值可能更改的字符串對象量,用來存儲在程序執(zhí)行過程中值可能更改的字符串對象。vmstr = NSMutableString stringWithString: str1;將將mstr設(shè)置設(shè)置為字符串對象,其內(nèi)容是為字符串對象,其內(nèi)容

43、是str1中的字符中的字符的副本的副本。將將stringWithString: 方法發(fā)送給方法發(fā)送給NSMutableString類時,返回了一個可變的字符串對象類時,返回了一個可變的字符串對象。vinsertString:atIndex:方法將方法將指定指定的字符串插的字符串插入入接收接收者,插入點從指定的索引值開始者,插入點從指定的索引值開始。v第二個第二個insertString:atlndex:調(diào)用使用調(diào)用使用length方法方法將一個字符串插將一個字符串插入入另一個字符串結(jié)尾。另一個字符串結(jié)尾。 appendString:實現(xiàn)同樣的任務(wù)。實現(xiàn)同樣的任務(wù)。v通過使用通過使用delete

44、CharactersInRange:方法方法,可以刪可以刪除字符串中指定數(shù)目的宇符除字符串中指定數(shù)目的宇符。15.2 字符串對象字符串對象武漢大學(xué)國際軟件學(xué)院Objective-C 2.0程序設(shè)計vsetString:方法可以用來直接設(shè)置可變字符串對象的內(nèi)方法可以用來直接設(shè)置可變字符串對象的內(nèi)容容。vreplaceCharactersInRange:方法用另一個字符串方法用另一個字符串來替換這個來替換這個字符字符串中的部分字符串中的部分字符??梢允褂么笮∠嗟然虿坏瓤梢允褂么笮∠嗟然虿坏鹊淖址畞硖鎿Q另一個字符的字符串來替換另一個字符串。串。v如果如果替換字符串還包括搜索字符串那么將會陷入無限循

45、環(huán)替換字符串還包括搜索字符串那么將會陷入無限循環(huán)v如果替換字符串為空,那么將有效地刪除所有捜索字符串如果替換字符串為空,那么將有效地刪除所有捜索字符串v最后,最后,NSMutablestring類還包含一個名為類還包含一個名為replaceOccurrencesOfString:withString: options:range:的方法,它可以用來執(zhí)行搜索并全部替的方法,它可以用來執(zhí)行搜索并全部替換換。15.2 字符串對象字符串對象武漢大學(xué)國際軟件學(xué)院Objective-C 2.0程序設(shè)計15.2 字符串對象字符串對象所有對象到哪里去了所有對象到哪里去了v本章開始討論過,對象的創(chuàng)建者負(fù)責(zé)釋放使

46、用的本章開始討論過,對象的創(chuàng)建者負(fù)責(zé)釋放使用的內(nèi)存。內(nèi)存。v所有被創(chuàng)建者添加到自動釋放池的對象,將在系所有被創(chuàng)建者添加到自動釋放池的對象,將在系統(tǒng)釋放池時全部釋放。統(tǒng)釋放池時全部釋放。v然而,如果開發(fā)的程序中創(chuàng)建了許多臨時的對象,然而,如果開發(fā)的程序中創(chuàng)建了許多臨時的對象,那么這些對象使用的內(nèi)存就會累積起來。在時那么這些對象使用的內(nèi)存就會累積起來。在時 可可能霈要允許在程序執(zhí)行過程中釋放內(nèi)存,而不只是能霈要允許在程序執(zhí)行過程中釋放內(nèi)存,而不只是在程序結(jié)尾釋放。在程序結(jié)尾釋放。武漢大學(xué)國際軟件學(xué)院Objective-C 2.0程序設(shè)計15.3 數(shù)組對象數(shù)組對象vFoundation數(shù)組是有序的對

47、象集合。數(shù)組是有序的對象集合。v一般情況下,一個數(shù)組中的元素都是一個特定類一般情況下,一個數(shù)組中的元素都是一個特定類型,存在可變數(shù)組和不可變數(shù)組。型,存在可變數(shù)組和不可變數(shù)組。v不可變數(shù)組是由不可變數(shù)組是由NSSArray類處理的,而可變數(shù)類處理的,而可變數(shù)組是由組是由NSMutableArray處理的。后者是前者的處理的。后者是前者的子類,就是說后者繼承前者的方法。子類,就是說后者繼承前者的方法。v在程序中使用數(shù)組對象,應(yīng)該包括在程序中使用數(shù)組對象,應(yīng)該包括 #import 武漢大學(xué)國際軟件學(xué)院Objective-C 2.0程序設(shè)計15.3 數(shù)組對象數(shù)組對象v代碼清單代碼清單15-6設(shè)置一個

48、數(shù)組,用來存儲一年中設(shè)置一個數(shù)組,用來存儲一年中的月份名字,然后顯示這些月份。的月份名字,然后顯示這些月份。Program 15.6#import #import #import #import int main (int argc, char *argv)int i;NSAutoreleasePool * pool = NSAutoreleasePool alloc init;/ Create an array to contain the month namesNSArray *monthNames = NSArray arrayWithObjects:”January”, ”Februa

49、ry”, ”March”, ”April”,”May”, ”June”, ”July”, ”August”, ”September”,”O(jiān)ctober”, ”November”, ”December”, nil ;武漢大學(xué)國際軟件學(xué)院Objective-C 2.0程序設(shè)計15.3 數(shù)組對象數(shù)組對象/ Now list all the elements in the arrayNSLog (”Month Name”);NSLog (”= =”);for (i = 0; i 12; +i)NSLog (” %2i %”, i + 1, monthNames objectAtIndex: i);po

50、ol drain;return 0;Program 15.6 OutputMonth Name= =1 January2 February3 March4 April5 May6 June7 July8 August9 September10 October11 November12 December武漢大學(xué)國際軟件學(xué)院Objective-C 2.0程序設(shè)計15.3數(shù)組對象數(shù)組對象v類方法類方法arrayWithObjects:可以用來創(chuàng)建使用一可以用來創(chuàng)建使用一列對象作為元素的數(shù)組。在這種情況下,按順序列對象作為元素的數(shù)組。在這種情況下,按順序列出對象并使用逗號隔開。這是方法使用的特殊列出對

51、象并使用逗號隔開。這是方法使用的特殊語法,這個方法可以接受可變數(shù)目的參數(shù)。要標(biāo)語法,這個方法可以接受可變數(shù)目的參數(shù)。要標(biāo)記參數(shù)列表的結(jié)束,必須把該列表的最后一個值記參數(shù)列表的結(jié)束,必須把該列表的最后一個值指定為指定為nil,它實際上并不存儲在數(shù)組中。它實際上并不存儲在數(shù)組中。v代碼清單代碼清單15-7中,中,monthNames被設(shè)置為被設(shè)置為arrayWithObjects:的參數(shù)所指定的的參數(shù)所指定的12個字個字符串。符串。v數(shù)組的元素是由他們的索引數(shù)確定的。與數(shù)組的元素是由他們的索引數(shù)確定的。與NSString對象類似,索引從對象類似,索引從0開始。開始。v要使用索引數(shù)來檢索其中的元素,

52、用要使用索引數(shù)來檢索其中的元素,用objectAtIndex:方法。方法。武漢大學(xué)國際軟件學(xué)院Objective-C 2.0程序設(shè)計15.3數(shù)組對象數(shù)組對象v代碼清單代碼清單15-7生成了一個素數(shù)表。需要一個可生成了一個素數(shù)表。需要一個可變數(shù)組存儲素數(shù),程序運行時,可變數(shù)組的容量變數(shù)組存儲素數(shù),程序運行時,可變數(shù)組的容量會根據(jù)需要自動增長。會根據(jù)需要自動增長。v即使素數(shù)是整數(shù),也不能直接在數(shù)組中存儲即使素數(shù)是整數(shù),也不能直接在數(shù)組中存儲int值,該數(shù)組只能容納對象。值,該數(shù)組只能容納對象。Program 15.7#import #import #import #import #import #

53、define MAXPRIME 50武漢大學(xué)國際軟件學(xué)院Objective-C 2.0程序設(shè)計15.3數(shù)組對象數(shù)組對象int main (int argc, char *argv)int i, p, prevPrime;BOOL isPrime;NSAutoreleasePool * pool = NSAutoreleasePool alloc init;/ Create an array to store the prime numbersNSMutableArray *primes =NSMutableArray arrayWithCapacity: 20;/ Store the firs

54、t two primes (2 and 3) into the arrayprimes addObject: NSNumber numberWithInteger: 2primes addObject: NSNumber numberWithInteger: 3;/ Calculate the remaining primesfor (p = 5; p = prevPrime);if (isPrime)primes addObject: NSNumber numberWithInteger: p;/ Display the resultsfor (i = 0; i = prevPrime總是為

55、真??偸菫檎妗?do-while循環(huán)退出且標(biāo)志循環(huán)退出且標(biāo)志isPrime仍然等于仍然等于yes時,時,p加到加到primes數(shù)組。數(shù)組。15.3數(shù)組對象數(shù)組對象武漢大學(xué)國際軟件學(xué)院Objective-C 2.0程序設(shè)計vFoundation類為數(shù)組提供了許多便利。然而,當(dāng)使類為數(shù)組提供了許多便利。然而,當(dāng)使用復(fù)雜的運算法則操縱大型數(shù)組時,應(yīng)使用低級數(shù)組來用復(fù)雜的運算法則操縱大型數(shù)組時,應(yīng)使用低級數(shù)組來構(gòu)造執(zhí)行。構(gòu)造執(zhí)行。15.3數(shù)組對象數(shù)組對象武漢大學(xué)國際軟件學(xué)院Objective-C 2.0程序設(shè)計15.3數(shù)組對象數(shù)組對象v制作地址簿制作地址簿v 代碼清單代碼清單15-8顯示了新的顯示了新

56、的AddressCard類的接口文件。類的接口文件。Program 15.8 Implementation File AddressCard.m#import “AddressCard.h”implementation AddressCard-(void) setName: (NSString *) theNamename = NSString alloc initWithString: theName;武漢大學(xué)國際軟件學(xué)院Objective-C 2.0程序設(shè)計15.3數(shù)組對象數(shù)組對象-(void) setEmail: (NSString *) theEmailemail = NSString

57、 alloc initWithString: theEmail;-(NSString *) namereturn name;-(NSString *) emailreturn email;-(void) printNSLog (”=”);NSLog (”| |”);NSLog (”| %-31s |”, name UTF8String);NSLog (”| %-31s |”, email UTF8String);NSLog (”| |”);NSLog (”| |”);NSLog (”| |”);NSLog (”| O O |”);NSLog (”=”);end武漢大學(xué)國際軟件學(xué)院Objecti

58、ve-C 2.0程序設(shè)計15.3數(shù)組對象數(shù)組對象v print方法嘗試用一種類似于方法嘗試用一種類似于Rolodex卡片的格式向用卡片的格式向用戶顯示地址卡片戶顯示地址卡片。v NSLog中的中的“%-31s”字符表明要用字符表明要用31個字符的字段個字符的字段寬度且左對齊的方式打印寬度且左對齊的方式打印UTF8 C-字符串,這確保輸出字符串,這確保輸出時地址卡片的右邊緣是整齊的時地址卡片的右邊緣是整齊的。v 下面是下面是15-8的測試程序,創(chuàng)建一個地址卡片、設(shè)置卡片的測試程序,創(chuàng)建一個地址卡片、設(shè)置卡片的值以及顯示卡片。的值以及顯示卡片。武漢大學(xué)國際軟件學(xué)院Objective-C 2.0程序

59、設(shè)計15.3數(shù)組對象數(shù)組對象Program 15.8 Test Program#import “AddressCard.h”#import int main (int argc, char *argv)NSAutoreleasePool * pool = NSAutoreleasePool alloc init;NSString *aName = ”Julia Kochan”;NSString *aEmail = ”;AddressCard *card1 = AddressCard alloc init;武漢大學(xué)國際軟件學(xué)院Objective-C 2.0程序設(shè)計15.3數(shù)組對象數(shù)組對象card1 setName: aName;card1 setEmail: aEmail;card1 print;card1 release;pool drain;return 0;Program 15.8 Output=| | Julia Kochan | | | | | O O |=武漢大學(xué)國際軟件學(xué)院Objective-C 2.0程序設(shè)計v card1 release用于釋放地址卡片占用的內(nèi)存。用于釋放地址卡片占用的內(nèi)存。v 用這種方法釋放用這種方法釋放AddressCard 對象的同時并沒有釋放對象的同時并沒有釋放分配給它的分配給它的name和和email成員的內(nèi)存成員的內(nèi)存。為了使為了使Ad

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論