iOS開發-OC語言 (四)數組,ios-oc

來源:互聯網
上載者:User

iOS開發-OC語言 (四)數組,ios-oc

知識點

1.NSArray

2.NSMutableArray 

 

1.數組的基本用法;

2.數組的遍曆

3.數組排序

 

 

===========   NSArray  不可變數組  =================

 

 

1、OC數組和c數組的區別

C語言的數組:

相同類型變數的有序結合。 類型:可以是簡答資料類型、構造資料類型

int     a[10];

int   *b[10];

 

  1)NSArray是一個對象,是任意類型對象地址的集合

不能存放簡單的資料類型(int, float, NSInteger…)

除非通過一些手段把單一資料型別變成對象。

  2)C數組可以儲存任意類型的資料

  3)NSArray下標越界不會有警告,但是運行會直接報錯

 

 

2、如何建立一個空數組

  NSArray *array = [[NSArray alloc] init];

        array = [NSArray array];

 

    3. 通過指定對象建立數組

     //只有一個元素

        array = [NSArray arrayWithObject:@"aaa"];

        //有n個元素

        array = [NSArray arrayWithObjects:@"1111",@"2222",@"333", nil];

 

 

     4.通過指定數組建立數組(兩個數組內容的一樣)

[NSArray arrayWithArray:數組];

 

     5.通過簡單的方式建立數組

    array = @[];//空數組

        array = @[@"111",@"222",@"333"];//3個元素

 

         

     6.把數組中所有的元素轉化為字串

    [array componentsJoinedByString:@“兩個元素之間添加的字串”];

 

    7.擷取數組元素個數

   [array count]

 

 

    8.通過索引擷取相應的元素(下標要小於數組的count)

   [array objectAtIndex:下標];

 簡單取值:array[下標]

 

 

     9.通過對象擷取在數組中的索引(通過元素擷取下標)

 

    [array indexOfObject:要找的元素]

 

    10.取出數組的最後一個元素或者第一個元素

           //取第一個元素

        [array firstObject];

        //取最後一個

        [array lastObject];

 

    11.判斷數組中數組包含某個元素

   [array containsObject:要尋找的對象]

 

 

    12.如何取出數組中的一部分元素

//索引的集合,儲存索引的,NSIndexSet是一個集合類(索引的集合),但是集合裡面不能有重複索引

 

//只初始化一個索引NSIndexSet *indexSet = [NSIndexSet indexSetWithIndex:2];//下標為1,長度為2NSRange range = NSMakeRange(0, 3);//構造一個範圍的索引indexSet = [NSIndexSet indexSetWithIndexesInRange:range]; [array objectsAtIndexes:indexSet]

 

 

 

   13.判斷NSArray中儲存的對象是否為指定類型的對象

                 /*

         [A isKindOfClass:B],判斷A類是否是B的子類或者本類。

         [A isMemberOfClass:B],判斷A類是否是B類(不包括子類)

         */

    

 

   14.判斷兩個數組內容是否相同(與順序有關)

    NSArray *arr1 = @[@"111",@"222",@"333"];

        NSArray *arr2 = @[@"111",@"333",@"222"];

        

        if ([arr1 isEqualToArray:arr2])

        {

            NSLog(@"內容完全相等");

        }

        else

        {

            NSLog(@"內容不完全相等");

        }

 

 

    15.把數組寫入檔案中(數組裡面是:NSString,int,float,double......)

   [array writeToFile:path atomically:YES]

 

   16.從檔案中讀取數組

  [NSArray arrayWithContentsOfFile:path]

 

 

   17.基本類型的封裝類

  NSNumber

//把int類型封裝成對象

 numberWithInt

 

 18.截取數組中指定範圍的元素

[array subarrayWithRange:要截取的範圍]

 

=============  NSArray數組的遍曆 ===========

   1.通過下標遍曆數組

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

{

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

}

 

 

   2、NSEnumerator  列舉程式

        1)objectEnumerator訊息

    作用:正序輸出所有元素

       NSEnumerator *enumerator = [array objectEnumerator];

        2)reverseObjectEnumerator訊息

    作用:逆序輸出所有元素

       enumerator = [array reverseObjectEnumerator];

    

   //取下一個元素

    [enumerator nextObject]

 

   3.快速枚舉法(for in)

      for (類型 *變數 in 數組)

 

  4.block方法遍曆

 

=========     NSMutableArray可變數組    =============

    1.思考:為什麼需要有NSMutableArray

 

2.NSMutableArray的作用

        

3.如何建立一個NSMutableArray

          1)建立空數組

        

           <1>NSMutableArray *array = [[NSMutableArray alloc] init];

<2>array = [NSMutableArray array];

 

 

            2)建立有對象的數組

               《1》初始化只能有一個對象

              NSMutableArray arrayWithObject:@"111"];

       《2》初始化只能有多個對象

[NSMutableArray arrayWithObjects:@"1111",@"222",@"333",@"4444", nil];

       [[NSMutableArray alloc] initWithObjects:<#(id), ...#>, nil];

               

  

    4.可變數組添加元素

        1)向可變數組裡面添加元素(在最後添加)

       [array addObject:元素];

 

        2)如何向可變數組中插入一個元素

   

         /*

         添加一個元素

         */

//在下標為0的位置添加333

       [array insertObject:@"333" atIndex:0];

          

 

         3)如何向可變數組中插入多個元素

       

/*添加多個元素*///要添加的元素NSArray *insertArray = @[@"444",@"555"];//要添加的索引NSIndexSet *indexSet = [NSIndexSet indexSetWithIndexesInRange:NSMakeRange(1, [insertArray count])];        /*注意:要添加元素數組的個數等於索引集合的個數,否則crash*/[array insertObjects:insertArray atIndexes:indexSet];

 

 

  5.根據數組下標取值

   [array objectAtIndex:下標];

 

  6、如何刪除元素

      1)刪除指定索引的元素

[array removeObjectAtIndex:下標];

 

    2) 刪除最後一個元素

[array removeLastObject];

 

    3)根據指定對象來刪除元素

[array removeObject:對象];

 

    4)刪除所有元素

[array removeAllObjects];

 

5)一次性刪除所有指定下標的元素

          [array removeObjectsAtIndexes:索引集合];

   

6) 刪除指定範圍內的元素

[array removeObjectsInRange:<#(NSRange)#>];

 

 

6.替換元素

//根據下標替換元素[array replaceObjectAtIndex:0 withObject:@"xiaoming"];//根據下標集合替換元素(多個元素替換)[array replaceObjectsAtIndexes:<#(NSIndexSet *)#> withObjects:<#(NSArray *)#>];//當前指定範圍的下標替換為指定數組中的元素[array replaceObjectsInRange:<#(NSRange)#> withObjectsFromArray:<#(NSArray *)#>];

 

 

7.交換兩個元素

 /*下標與下標進行交換*/

 [array exchangeObjectAtIndex:交換的下標 withObjectAtIndex:交換的下標];

 

 

========   數組排序 ============

8、數組排序

     1)數組排序方法

    sortedArrayXXX函數

作用:通過傳回值將排序結果告訴使用者,{不會修改數組中的元素}

適用於不能修改的數組

    sortUsingXXX函數

      作用:直接對數組內的元素進行排序,{最後結果儲存在要排序的數組中}

適用於可被修改的數組

 

 

 

  2)使用block排序

    什麼是block:類似於c語言中的函數指標

    block的好處:可以訪問函數中的局部變數

    !!!定義一個block文法!!!

 

    block如何修改函數中的局部變數

__block關鍵字,是block文法特有的關鍵字  相當於將變數變成全域變數

 

 其它說明:

    函數指標是指向函數的指標變數,即本質是一個指標變數。

   int (*f) (int x); /* 聲明一個函數指標 */

   f=func; /* 將func函數的首地址賦給指標f */

 

 指向函數的指標包含了函數的地址,可以通過它來調用函數。聲明格式如下:

 類型說明符 (*函數名)(參數)

 

3) NSSortDescriptor進階排序

 

 

====== 其他 ==============

 

   selector選取器使用

  1.SEL資料類型

  1)什麼是

    Objective-C在SEL編譯的時候,會根據方法的名字(包括參數序列),

    產生一個用 來區分這個方法的唯一的一個ID,這個ID就是SEL類型的

 

還可以這樣理解:

                     SEL就是對方法的一種封裝。封裝的SEL類型資料它對應相應的方法地址,找到方法地址就可以調用方法。在記憶體中每個類的方法都儲存在類對象中,每個方法都有一個與之對應的SEL類型的資料,根據一個SEL資料就可以找到對應的方法地址,進而調用方法。

 

方法的儲存位置:

  • 在記憶體中每個類的方法都儲存在類對象中
  • 每個方法都有一個與之對應的SEL類型的資料
  • 根據一個SEL資料就可以找到對應的方法地址,進而調用方法

 

  2)作用:

從效率的角度上來說,執行的時候不是通過方法名字而是方法ID也就是一個整數來尋找方法,

       由於整數的尋找和匹配比字串要快得多,所以這樣可以在某種程度上提高執行的效率

  並且增強程式的靈活性

 

  3)使用方法

通過@selector方法擷取

SEL s1 = @selector(compare:);

通過NSSelectorFromString將一個字串轉換為一個SEL類型

SEL s2 = NSSelectorFromString(@"compare:");

 

 

2.performSelector

  1)作用:執行SEL

 

  2)使用@selector排序

    SEL 是oc特有的類型  compare:   @selector(compare:)

         一個方法名對應一個編號

         只要方法名相同,那麼它的SEL值就相同

         ios會將方法名(函數名)轉化為一個唯一編號  編號就是SEL類型

         系統通過識別SEL 去尋找對應的方法名

 

         @selector :方法選取器

         @selector(xxx) xxx就是方法名        

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.