Objective-c 基礎架構(初學者-總結),objective-c架構

來源:互聯網
上載者:User

Objective-c 基礎架構(初學者-總結),objective-c架構

一個架構其實就是一個軟體包,它包含了多個類。Mac 作業系統提供了幾十個架構,主要協助開發人員快速的在Mac 系統上開發應用程式。其中包括一些基礎架構,就是為所有程式開發提供基礎的架構,其中幾個常用的類包括:字串(NSString), 數字(NSNumber), 數組 (NSArray),字典 (NSDictionary), 集合 (NSSet)等。這幾個類都是經常用到的,所以必須很好的掌握,下來我們就來詳細介紹這幾個類。

  1. 數字對象 (NSNumber)

    為什麼要使用數字對象?我們已經熟悉了使用 int 等資料類型生明數字變數,但是因為很多類(比如 NSArray)都要求使用對象,但 int 等聲明的數字變數不是對象,所以,無法在這些類中使用。 NSNumber 就是數字對象類。

     下面通過一個例子來示範這個數字對象的用法。

  

 1 #import <Foundation/Foundation.h> 2  3 int main(int argc,const char *argv[]){ 4     @autoreleasepool { 5         NSNumber *myNumber,*floatNumber,*intNumber,*doubleNumber; 6          7         // 建立 interger 類型對象 8         intNumber = [NSNumber numberWithInt:1]; 9         NSLog(@"intNumber = %li",[intNumber integerValue]);10         11         // 建立 long 類型對象12         myNumber = [NSNumber numberWithLong:0xababab];13         NSLog(@"myNumber = %lx",[myNumber longValue]);14         15         // 建立  char  類型對象16         myNumber = [NSNumber numberWithChar:'c'];17         NSLog(@"myNumber = %c",[myNumber charValue]);18         19         // 建立 float 類型對象20         floatNumber = [NSNumber numberWithFloat:3.14];21         NSLog(@"floatNumber = %f",[floatNumber floatValue]);22         23         // 建立 double 類型對象24         doubleNumber = [NSNumber numberWithDouble:3.11];25         NSLog(@"doubleNumber = %lg",[doubleNumber doubleValue]);26         27         // 判斷兩個對象的值是否相等28         if ([intNumber isEqualToNumber:floatNumber])29             NSLog(@"intNumber = floatNumber");30         else31             NSLog(@"intNumber != floatNumber");32         33         // 比較兩個對象的值大小34         if ([intNumber compare:floatNumber] == NSOrderedAscending)35             NSLog(@"左邊的數字小");36         else37             NSLog(@"右邊的數字小");38     }39     return 0;40 }

 

 

  2. 字串對象

   字串常量是由一個@的符號和一對雙引號括起來的字元序列。例如:@"hello world"。字元常量和字串常量是不同的量,它們的區別主要有以下3種:

    1. 字元是由單引號括起來的,而字串常量是由@和雙引號括起來的。

    2. 字元常量只有一個字元,而字串常量可以有多個字元。

    3. 字元常量只佔一個位元組。而字串常量的位元組數是由字元個數加1。  增加的字元個數是結束符'\0'。

  Objective-C 中使用NSString來操作字串,而不是使用c/c++的char*。它在字串的前面加一個@符號。比如:@"蘋果"。下面通過一個例子來具體表現它在oc中的用法:

  2.1 不可修改的字串 (NSString)

  

 1 #import <Foundation/Foundation.h> 2  3 int main(int argc,const char *argv[]){ 4     @autoreleasepool { 5  6     // stringWithString 是基於一個字串建立另外一個字串對象。 7     NSString *str1 = @"hello world"; 8     NSString *str2 = [NSString stringWithString:str1]; 9     NSLog(@"str1 = %@ , str2 = %@",str1,str2);10     11     // NSString 中提供了格式化字串的方法 stringWithFormat,oc 中用%@來表示一個字串的值。12     NSString *name = @"xiaozhang";13     NSString *str3 = [NSString stringWithFormat:@"I am %@",name];14     NSLog(@"str3 = %@",str3);15     16     // 在一個字串的後面新加一個字串。17     NSString *guilin = @"guilin";18     NSString *welcome = [guilin stringByAppendingString:@" welcome you!"];19     NSLog(@"%@",welcome);20     21     // 字串的比較和判斷22     BOOL isSame = [str1 isEqualToString:@"str3"];23     if(isSame)24         NSLog(@"str1 = str2");25     else26         NSLog(@"str1 != str2");27     28     NSComparisonResult result = [str1 compare:str2];29     if(result == NSOrderedSame)  //內容相同30         NSLog(@"str1 == str2");31     else if(result == NSOrderedAscending) // 左邊 小於 右邊32         NSLog(@"str1 < str2");33     else  //result == NSOrderedDescending // 左邊  大於 右邊34         NSLog(@"str1 > str2");35     36     // 字串大小寫轉換37     NSString *str4 = [str1 uppercaseString]; // 轉換為大寫38     NSString *str5 = [str1 lowercaseString]; // 轉換為小寫39     NSLog(@"str4 = %@,str5 = %@",str4,str5);40         41     // 字串的截取42     NSString *str6 = [str1 substringToIndex:2];43     NSLog(@"str6 = %@",str6);44     45     // 去除前4個字串形成新的字串46     NSString *str7 = [str1 substringFromIndex:4];47     NSLog(@"str7 = %@",str7);48     49     // 從某個字串到某個字串形成的新的字元50     NSString *str8 = [[str1 substringFromIndex:2] substringToIndex:5];51     NSLog(@"str8 = %@",str8);52         53     NSRange rang = [str1 rangeOfString:@"lo"];54     NSLog(@"包含字串開始的位置是%lu,長度是%lu",rang.location,rang.length);55         56     if([str1 rangeOfString:@"lo"].location == NSNotFound)57         NSLog(@"沒有找到包含的字串");58     else59         NSLog(@"包含字串開始的位置是%lu,長度是%lu",rang.location,rang.length");60     61     }62     return 0;63 }

 

  2.2 可修改的字串 (NSMutableString)

  NSString 本身不允許修改,如果要修改的話,可以使用 NSMutableString,NSMutableString 是 NSString 的子類。所有 NSString 都適用於 NSMutableString ,它提供了附加字串的方法:

  - (void) appendString: (NSString *) string;

  - (void) appendFormat: (NSSting *)string;

 

  例如:

        NSMutableString *str =[NSMutableString stringWithString:@"Giulin"];

        [str appendString:@"welcome you!"];

 

  3. 數組對象

 

   數組是有序的對象集合,一般情況下,數組中的元素都是相同類型的。類似可變字串和不可變字串,也有可變數組和不可變數組。 

 

  3.1 不可變數組 (NSArray)

 

  NSArray 是數組類,在數組的中的元素必須以 nil 結尾。以下舉個例子來說明它的具體用法:

  

  

#import <Foundation/Foundation.h>

 

int main(int argc,const char *argv[]){

    @autoreleasepool {

        NSArray *array = [NSArray arrayWithObjects:@"zhangsan",@"lisi",@"wangwu",@"zhaoliu",nil];

        

        for(int i ; i < [array count] ; i++)

            NSLog(@"%@",[array objectAtIndex:i]);

        

        if([array indexOfObject:@"xiaoli"] == NSNotFound)

            NSLog(@"xiaoli 不在其中!");

    }

    return 0;

}


 

 

 

  3.2 可修改數組 (NSMutableArray)

  NSArray 是靜態數組,所以不能往該數組中添加元素,必須使用 NSMutableArray 來動態管理數組。NSMutableArray 是NSArray 的字類。

    

  下面通過具體例子來說明它的具體用法:

  

 1 #import <Foundation/Foundation.h> 2  3 int main(int argc , const char *argv[]){ 4     @autoreleasepool { 5         NSMutableArray *city = [NSMutableArray arrayWithObjects:@"西安",@"北京",@"上海", nil]; 6         [city addObject:@"深圳"];   // 數組中增加一個元素深圳。 7         [city removeObject:@"上海"]; // 數組中刪除一個元素上海。 8         [city insertObject:@"桂林" atIndex:1]; // 在第一個元素那裡插入桂林。 9         // [city removeAllObjects]; // 刪除所有元素。10         for(int i ; i < [city count] ; i++)11             NSLog(@"%@",[city objectAtIndex:i]);12         13     }14     return 0;15     16 }

  4. 字典對象 (NSDictionary 和 NSMutableDictionary)

  NSDictionary 提供了 “鍵-值” 對的集合。比如,使用字典類實現學生學號到姓名的存放,編號是一個鍵(唯一性),姓名是一個值。它的方法有:

  

   下面舉個例子來看其具體的應用:

  

 1 #import <Foundation/Foundation.h> 2  3 int main(int argc , const char *argv[]){ 4     @autoreleasepool { 5         NSDictionary *student = [NSDictionary dictionaryWithObjectsAndKeys:@"xiaohong",@"01",@"xiaoming",@"02",@"xiaoqiang",@"03",nil]; 6         NSLog(@"%@",[student objectForKey:@"01"]); // 尋找 01 鍵對應的值,不存在返回 nil。 7         NSLog(@"人數:%li",[student count]); // 獲得個數。 8     } 9     return 0;10 }

 

  同上面介紹的字串和數組類似,NSDictionary 也是不可修改的字典。可變字典是 NSMutableDictionary,它可以動態添加和刪除元素,它的方法有:

   

   

   下面通過一個具體的例子來簡單應用一下:

 1 #import <Foundation/Foundation.h> 2  3 int main(int argc , const char *argv[]){ 4     @autoreleasepool { 5         NSMutableDictionary *student = [NSMutableDictionary dictionary]; 6         [student setObject:@"xiaohong" forKey:@"01"]; 7         [student setObject:@"xiaoming" forKey:@"02"]; 8         [student setObject:@"xiaodong" forKey:@"03"]; 9         10         NSLog(@"01: %@",[student objectForKey:@"01"]);11         NSLog(@"02: %@",[student objectForKey:@"02"]);12         NSLog(@"03: %@",[student objectForKey:@"03"]);13         14     }15     return 0;16 }

 

  4. 集合對象 (NSSet)  

  

  集合對象是一組單值對象的組合,比如 1 個 包含 1 到 50 個數位集合。集合對象的操作包括搜尋,添加,刪除集合中的成員,比較 2 個集合,計算兩個集合的交集和並集等。在下面的程式中,示範了一些集合的常用方法。

  

 1 #import <Foundation/Foundation.h> 2  3 @interface NSSet (printInteger) 4  5 - (void)printSet; 6  7 @end 8  9 @implementation NSSet (printInteger)10 11 - (void)printSet{12     for (NSNumber *integer in self){13         printf("%li",[integer integerValue]);14     }15     printf("\n");16 }17 @end18 19 int main(int argc , const char * argv[]){20     @autoreleasepool {21         NSMutableSet *set1 = [NSMutableSet setWithObjects:[NSNumber numberWithInteger:1],[NSNumber numberWithInteger:5],[NSNumber numberWithInteger:3],nil];22         23         NSMutableSet *set2 = [NSMutableSet setWithObjects:[NSNumber numberWithInteger:7],[NSNumber numberWithInteger:2],[NSNumber numberWithInteger:4],nil];24         25         if([set1 isEqual:set2] == YES) // 比較兩個集合是否相等26             NSLog(@"set1 = set2");27         else28             NSLog(@"set1 != set2");29         30         if([set1 containsObject:[NSNumber numberWithInteger:2]] == YES) // 判斷該集合是否包含某一元素31             NSLog(@"set1 包含2");32         else33             NSLog(@"set1 不包含2");34         35         [set1 addObject:[NSNumber numberWithInteger:6]];  // 向集合中添加元素36         [set1 removeObject:[NSNumber numberWithInteger:6]]; // 刪除某個元素37         38         [set1 intersectSet:set2];  // 計算2個集合的交集39         [set1 unionSet:set2]; // 計算2個集合的並集40         [set1 printSet];41     }42     return  0;43 }

 

  5. 枚舉訪問

  對於數組,字典和集合,Objective-C 提供了枚舉方法來訪問各個元素,具體方法有兩種。

   方法 1:

  

   方法2:

    

  第二種方法簡潔,所以經常用第二種方法,一般稱第二種方法為快速枚舉。下面舉一個字典快速枚舉的例子:代碼定義了一個NSString 類型的對象,用來儲存每次取出來的健值,然後基於取出的鍵,調用字典對象student的objectForKey:方法將 值 也取出來,並列印到控制台上。

  

 1  #import <Foundation/Foundation.h> 2  3  int main(int argc , const char *argv[]){ 4         @autoreleasepool { 5                 NSMutableDictionary *student = [NSMutableDictionary dictionary]; 6                 [student setObject:@"xiaohong" forKey:@"01"]; 7                 [student setObject:@"xiaoming" forKey:@"02"]; 8                 [student setObject:@"xiaodong" forKey:@"03"]; 9     10                 for(NSString *key in student)  11                     NSLog(@"%@:%@",key,[student objectForKey:key]);12     }13     return 0;14 }

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.