Objective-c 基礎框架(初學者-總結)

来源:http://www.cnblogs.com/bolin-123/archive/2016/03/04/5241889.html
-Advertisement-
Play Games

一個框架其實就是一個軟體包,它包含了多個類。Mac 操作系統提供了幾十個框架,主要幫助開發者快速的在Mac 系統上開發應用程式。其中包括一些基礎框架,就是為所有程式開發提供基礎的框架,其中幾個常用的類包括:字元串(NSString), 數字(NSNumber), 數組 (NSArray),字典 (N


一個框架其實就是一個軟體包,它包含了多個類。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         else
31             NSLog(@"intNumber != floatNumber");
32         
33         // 比較兩個對象的值大小
34         if ([intNumber compare:floatNumber] == NSOrderedAscending)
35             NSLog(@"左邊的數字小");
36         else
37             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     else
26         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     else
59         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 @end
18 
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         else
28             NSLog(@"set1 != set2");
29         
30         if([set1 containsObject:[NSNumber numberWithInteger:2]] == YES) // 判斷該集合是否包含某一元素
31             NSLog(@"set1 包含2");
32         else
33             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 }
複製代碼
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 轉載自並做少量添加:http://www.cnblogs.com/playing/archive/2011/04/07/2008620.html Layout對於迅速的搭建界面和提高界面在不同解析度的屏幕上的適應性具有很大的作用。這裡簡要介紹Android的Layout和研究一下它的實現。 Andr
  • 原文出處: codingZero 歡迎分享原創到伯樂頭條 導語 不會使用block的iOS程式員,不是一個合格的程式員學會了block,你再也不想用繁瑣的代理block沒有你想象中的那麼難,不要害怕,不要畏懼,勇敢嘗試筆者入行iOS時已經是ARC的天下,所以這裡只說ARC環境下的使用 什麼是bloc
  • Android Studio 優秀插件系列: Android Studio 優秀插件(一):GsonFormat Android Studio 優秀插件(二): Parcelable Code Generator -------------------------------------------
  • 自己的學習筆記。
  • 一般比較短小的音樂(如游戲中的打鬥、按鍵音效等)則要通過playEffect來播放。
  • 問題 大家都知道,在iOS里的AlertView不會阻塞後續代碼的執行,但如果有時候需要這樣做該怎麼辦呢? 解決方案 通過回調 也就是把後續要執行的代碼放到回調函數中去,可以參見 "UIAlertView Blocks" ,我今天要重點說明的是下麵這種方式。 使用RunLoop 我們都主線程上的Ru
  • 一、概述 隨著Android 6.0發佈以及普及,我們開發者所要應對的主要就是新版本SDK帶來的一些變化,首先關註的就是許可權機制的變化。對於6.0的幾個主要的變化,查看查看官網的這篇文章http://developer.android.com/intl/zh-cn/about/versions/ma
  • 創建你的第一個iOS框架 如果你曾經試圖去創建一個自己的iOS框架的話,你應該知道這件事並不是那些畏懼困難的人能夠成功完成的-畢竟管理依賴和編寫測試並不容易。這篇文章將從開始到最終完成一步步的進行講解,以便你掌握後可以更好的創建自己的框架。 在教程中我們會構建一個框架,框架裡面會暴露一個名為RGBU
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...