OC知識點歸納

来源:http://www.cnblogs.com/Xebdison/archive/2016/04/27/5438504.html
-Advertisement-
Play Games

新手一枚,在學習過程中,整理自己的筆記,與各位新手大大一起分享,一起進步(PS:其實是怕自己會忘記,又苦於沒有錢買筆記本,哈哈),如有錯誤,望大家提出,我一定最快修改,這僅僅是小生的自我理解,並不想誤人子弟,不喜勿噴. 首先,整理一下在OC基礎中會接觸到的類: NSString,NSMutableS ...


新手一枚,在學習過程中,整理自己的筆記,與各位新手大大一起分享,一起進步(PS:其實是怕自己會忘記,又苦於沒有錢買筆記本,哈哈),如有錯誤,望大家提出,我一定最快修改,這僅僅是小生的自我理解,並不想誤人子弟,不喜勿噴.

 

首先,整理一下在OC基礎中會接觸到的類:

NSString,NSMutableString

NSArray,NSMutableArray

NSDictionary,NSMutableDictionary 以上3組類都是經常會用到的,使用頻率非常高,然後就是自定義類等等

還有一些比如NSData,NSDate,NSFileHandle這些類,用的一般不是很多

 

 

1.NSString和NSMutableString

NSString:

//1)最基本的方式
NSString *str = @"abc";   //常量區
//2) 類方法創建字元串
NSString *str2 = [NSString stringWithFormat:@"xxx"];      //堆區
//3)使用對象方法,來創建字元串
NSString *str3 = [[NSString alloc]initWithString:@"abc"];//常量區

//4) 把字元串寫入到到文件中
NSString *str4 = @"每當我錯過一個女孩,我就向山上放一塊磚,於是這個世界就有了長城!";
         NSMutableString的用法同理:
//可變字元串的操作:
        //+(instancestype)string{   return [[[NSMutableString alloc] init] autorelease];}
        
        NSMutableString *str = [NSMutableString string];
        // 1)添加內容到字元串中
        // i, appendString
        [str appendStbaring:@"hello"];
        // ii, 格式化的插入
        int a = 10;
        [str appendFormat:@" a = %d",a];
        // iii.在指定位置處插入字元串
        [str insertString:@"abc" atIndex:2];
        
        // 2)從字元串中刪除內容
        // 刪除指定範圍的 字元串
        //heabcllo a = 10
        [str deleteCharactersInRange:NSMakeRange(2, 3)];
        
        // 3)替換字元串中的內容
        //hello a = 10
        //hesss a = 10
        //當給定的內容大於 我們指定的範圍的時候 ,這個時候,以給定的內容為準
        [str replaceCharactersInRange:NSMakeRange(2, 3) withString:@"sssxxxx"];
        
        // 4)查找子字元串 ()
        NSRange r1 = [str rangeOfString:@"ss"];
        NSLog(@"%@",NSStringFromRange(r1));
        
        NSLog(@"str : %@",str); //str:hesssxxxx a = 10
        
        // 重要:
        // 1)NSMutableString 容易犯的錯誤
        //        NSMutableString     NSString
        NSMutableString *str2     =   @"abc";
        //       運行的時候,str2 ----> NSString
        //編譯的時候不會報錯,因為str2 是NSMutableString 類型的
        //運行時,會報錯
        //  str2 變成了NSString 類型的了
        //  NSString 是不可變的,沒有appendString 方法
        [str2 appendString:@"xxxx"];
        // 2)NSMutableString 有一個string的屬性,它可以吧字元串內容給覆蓋掉
        str.string = @"abc";  //str = abc
        NSLog(@"str : %@",str);

 

NSString   不可變:指的是字元串在記憶體中占用的存儲空間固定,並且存儲的內容不能發生變化 NSMutableString   可變:指的是字元串在記憶體中占用的存儲空間可以不固定,並且存儲的內容可以被修改

      兩者的區別:NSString是不可變的, 裡面的文字內容是不能進行修改的,NSMutableString是可變的, 裡面的文字內容可以隨時更改

 

 

 

 

2.NSArray和NSMutableArray

NSArray是OC中的數組類, 開發中建議儘量使用NSArray替代C語言中的數組 C語言中數組的弊端 int array[4] = {10, 89, 27, 76}; 只能存放一種類型的數據.(類型必須一致) 不能很方便地動態添加數組元素、不能很方便地動態刪除數組元素(長度固定)
// 1) 使用類方法創建
NSArray *arr = [NSArray array];  //空數組 沒有意義
// 2) 創建數組,有一個元素 (元素的類型必須是一個OC的對象)
NSArray *arr1 = [NSArray arrayWithObject:@"abc"];
// 3) 創建數組,有多個元素
NSArray *arr2 = [NSArray arrayWithObjects:@"one",@"two",@"three", nil];
// 4) 可以用一個已經存在的數組,創建一個新的數組
NSArray *arr3 = [NSArray arrayWithArray:arr2];
// 5) 快速創建
NSArray *arr4 = @[@"one",@"two",@"three",@"1",@1];

// 使用對象方法創建數組
// nil用來標誌數組已經結束了
// 怎麼樣才能存儲一個null
// [NSNull null];             //列印時是 "<null>"
NSArray *arr5 = [[NSArray alloc] initWithObjects:@"1",@"2",@"3",@"4",[NSNull null],@"5",
nil];
// 查看數組的內容
// 當我們以 %@ 的格式,列印 數組 ,此時得到的是一個(數組元素,數組元素2)
NSLog(@"%@",arr5);

//NSArray沒有addObject這個方法

NSMutableArray *arrayM = [NSMutableArray arrayWithObjects:@"hehe",@"lala",@"haha", nil];
        //給可變數組arrayM添加一個hehe1對象
        [arrayM addObject:@"hehe1"];
        
        NSLog(@"%@\n%@",arr2,arrayM);

 

   NSLog列印結果:

2016-04-27 12:44:05.986 3.14[10393:372743] (
    one,
    two,
    three
)
(
    hehe,
    lala,
    haha,
    hehe1
)

 

NSArray和NSMutableArray的區別:NSArray是不可變的,一旦初始化完成,其內容是固定的,永遠不能修改,也不能刪除裡面的元素.

 

 

3.NSDictionary和NSMutableDictionary

NSDictionary

//創建 對象
// 1) 類方法
NSDictionary *dict = [NSDictionary dictionary]; //空字典,不可變,沒有意義
//                                                      value           key
NSDictionary *dict2 = [NSDictionary dictionaryWithObject:@"zhangsan" forKey:@"zs"];
// 創建多組元素
NSDictionary *dict3 = [NSDictionary dictionaryWithObjectsAndKeys:@"v1",@"k1",@"v2",@"k2",@"v3",@"k3", nil];

// 2) 對象方法
NSDictionary *dict4 = [[NSDictionary alloc] initWithObjectsAndKeys:@"v1",@"k1", nil];
// 註意: 1) 不管是key 還是 value 註意都必須是對象類型(不能是基本數據類型)
//       2) key的值是不能夠重覆的,如果鍵值重覆,則後面的不能再添加了
//       3) 集合元素是無需的
//       4) 可以通過key值來快速的獲取value的值
// NSLog 以 %@的形式輸出 字典,得到的是 {鍵值對}
NSLog(@"dict = %@",dict3);

//快速創建字典 (常用)
NSDictionary *dict5 = @{@"k1":@"v1",@"k2":@"v2",@"k3":@"v3",@"k1":@"v8"};
NSLog(@"dict5 = %@",dict5);

//訪問
// 1) 獲取字典的長度
NSLog(@"%ld",dict5.count);
// 2) 根據key值,獲取value值
NSString *str2 = [dict5 objectForKey:@"k2"];
//NSLog(@"str2 = %@",str2);
//遍歷
// 1) 快速枚舉的方式
for (id obj in dict5) {
    // 此時遍歷的過程中,得到的obj 都是key
    //[dict5 objectForKey:obj]根據key獲取value值
    NSLog(@"key = %@, value = %@",obj,[dict5 objectForKey:obj]);
}
// 2)使用block的方式
[dict5 enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) {


    if([key isEqualToString:@"k2"]){


        *stop = YES;  //遍歷停止
    }else{
        NSLog(@"key= %@,value = %@",key,obj);
    }

}];

//字典的遍歷不一定是有序的

//檢查字典中是否包含指定的key值
// 獲取所有的key
NSArray *keys = [dict5 allKeys];
NSLog(@"key = %@",keys);
if([keys containsObject:@"k1"]){
    NSLog(@"存在");
}

NSDictionary沒有增\刪\改\查,因為是不可變的,它只能獲取,遍歷.

NSMutableDictionary:

//1) 創建 字典
// 類方法
NSMutableDictionary *dict = [NSMutableDictionary dictionary];
NSMutableDictionary *dict2 = [NSMutableDictionary dictionaryWithObject:@"zhaosi" forKey:@"zs"];
// 對象方法
NSMutableDictionary *dict3 = [[NSMutableDictionary alloc] initWithObjectsAndKeys:@"v1",@"k1",@"v2",@2, nil];
//快速創建
NSMutableDictionary *dict = [NSMutableDictionary dictionary];
dict.dictionary = @{@"name":@"bob",@"age":@"18"};
//添加值到字典中
[dict setObject:@"man" forKey:@"sex"];
NSLog(@"%@",dict);

//2) 操作字典  增刪改查
[dict setObject:@"v1" forKey:@"k1"];
[dict setObject:@"v2" forKey:@"k2"];
[dict setObject:@"v3" forKey:@"k3"];
//刪除元素
[dict removeObjectForKey:@"k1"];
[dict removeAllObjects];
//修改元素
[dict2 setObject:@"zhangsan" forKey:@"zs"];
//簡寫形式
dict2[@"zs"]=@"zhaosi";
dict2[@2]= @"vvvvvv2";
//3) 註意
NSLog(@"dict = %@",dict2);

NSMutableDictionary 可以做到增\刪\改\查,這是與NSDictionary的區別

 

 

 

以上三組類,大致的區別是一樣的,都是可變與不可變之分,後期會講到setter(設置)和getter(獲取)跟這個道理是一樣的,所以在使用過程中,一定要先判斷自己需要的對象是可變的還是不可變的.

 

 

未完待續....

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1、頁面載入成功後,點擊選中或取消選中該checkbox,checkbox屬性里的checked屬性不會根據該checkbox是否選中而變化 2、checkbox里的onchange或onclick方法里用jquery的attr方法獲取checked是看得到的checked屬性的值與它是否給鉤上沒有 ...
  • 相信很多小伙伴會遇到這種問題,用ajax做非同步請求的時候,在IE瀏覽器下,並沒有發送出去。但是相關程式確實執行了。為什麼呢? 原來這是IE緩存方式的原因,所以呢,用下邊的解決方案吧。 1.在請求的URL後邊加上隨機數。Math.random(); ...
  • //格式化日期 function setDate(date){ y=date.getFullYear(); m=date.getMonth()+1; d=date.getDate(); m=m<10?"0"+m:m; d=d<10?"0"+d:d; return y+"-"+m+"-"+d; } / ...
  • <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>Title</title> <!--先載入css --> <link rel="stylesheet" href="style.css"></head><body> ...
  • JQuery AJAX中遇到這樣一個問題,參數中包含特殊字元,比如&'#@等, 這時執行AJAX的時候就會出問題,因為所傳的參數變了.看個示例就明白: 方案一: 上面執行的ajax就是非同步刪除一個name為 11&abd 的數據 當請求到ajax.ashx頁面時,我們獲取到的name參數為11 執行 ...
  • 打開一個已經下載好的文件有很多種方法,例如打開一個MP4文件,你可以選擇AVPlayer,MPMovieplayerViewController,QuickLook,或者是百度影音等等,方法不止一種,以需求而定. QuickLook是快速查看,平時使用Mac電腦就會比較熟悉.不依賴完整的應用,而是提 ...
  • 使用場景 一個半透明的框上面 放了一些label 改變半透明view的alpha 結果 label的 alpha 也跟著改變了。 其實不用那麼麻煩 給你們UI 要一個色值也可以 不需要 自己寫了 這樣比較好一點 。 既然 這樣寫了 出現問題 就解決問題。 針對放在一個view的label 字體顏色的 ...
  • 首先,什麼是block:block其實就是一個代碼塊,把你想要執行的代碼封裝在這個代碼塊里,等到需要的時候再去調用。那block是OC對象嗎?答案是肯定的 做一道很簡單的關於block的測試題。: 這道題是我公司面試題中的一道,來面試的都是至少兩年工作經驗的,但是很鬱悶,這道題絕大多數人寫的都是6。 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...