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
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...