OC本学习笔记Foundatio框架集
生活随笔
收集整理的這篇文章主要介紹了
OC本学习笔记Foundatio框架集
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
??
一、OC數組
????? ? OC數組是一個類,它也分不可變數組NSArray和可變數組NSMutableArray。
? ? 1?不可變數組的創建
// 創建一個不可變數組。元素為一個OC字符串對象 @"小橋"NSArray *array1 = [NSArray arrayWithObject:@"小橋"];// 創建一個不可變數組,元素為多個OC字符串對象NSArray *array2 = [NSArray arrayWithObjects:@"葬花 橋", @"120歲", @"來自武漢" , nil];// 高速創建一個不可變數組NSArray *array3 = @[@"葬花 橋", @"120歲", @"來自武漢"]; // 這是Xcode的一個特性。它會把這句自己主動轉換成上面那句 ????????? ?高速創建數組@[]和 @"" 一樣都是Xcode會自己主動替換成完整的語句。后面還有非常多其他的,像@{}等等。
? ???2?OC數組的元素個數統計
????? ? 在C中的數組中。數組的下標就是數組元素的個數,OC數組中提供了count對象方法,如:? ? ? ?
? ? ?3?OC數組的訪問
????? ? C數組的訪問非常easy。a[i]?? ?這就是訪問數組a的第 i ?個元素,OC數組中訪問指定元素例如以下:
// 訪問數組元素NSLog(@"第%d個元素為%@", 0, [array3 objectAtIndex:0]); ? ?蘋果官方為和簡化。又提供了Xcode的新特性,OC數組的訪問變得簡單。能夠和C數組有一樣的寫法:
NSLog(@"第%d個元素為%@", 1 , array3[1]);<span style="font-family: Menlo; line-height: 1.6;">?</span>? ?簡化的寫法依舊是編譯器自己主動替換成上一個寫法,所以盡管寫法一樣但本質不同。
????? ? 1.C中的數組遍歷也能夠用在OC數組中:
// 1.傳統遍歷方法for (int i=0; i<array3.count; i++){NSLog(@"第%d個元素---%@", i, array3[i]);} ????????? ? 這是面向過程的數組遍歷,以下兩種是面向對象的數組遍歷:
????? ? 2.
// 2.OC遍歷unsigned long i = 0; // 記住當前下標for (NSString *obj in array3) // array3中的對象所有是OC字符串,假設不是同一種類型就用 id{i = [array3 indexOfObject:obj]; // 獲取當前元素的下標NSLog(@"第%ld個元素---%@", i, obj);} ????????? ? 這樣的遍歷不能獲取當前的下標,必須定義標志變量 i?
????? ? 3.bloc遍歷
// 3.block遍歷,調用enumerateObjectsUsingBlock: 方法。傳遞一個block參數[array3 enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) // 這些參數由方法enumerateObjectsUsingBlock傳遞過來{NSLog(@"第%ld個元素----%@", idx, obj); // 對數組元素的操作在block中進行}]; ????????? ? 按小橋的理解block遍歷并非在block中訪問的OC數組。而在?enumerateObjectsUsingBlock:這種方法中。當中????? ? ? ?????????的for循環中獲取數組當前元素賦值給obj,而我們能夠在block參數中寫我們要運行的一些代碼來操作數組元素,enumerateObjectsUsingBlock:方法每循環一次就調用一次block運行我們的代碼,當中 *stop是一個地址傳遞的標志參數,能夠控制循環是否繼續下去,假設在block中賦值為 YES 那么遍歷將停止。
?????5?可變數組的創建和使用
????? ? 因?為可變數組類是不可變數組類的子類,所以繼承了父類的方法。使用同樣,小橋這里主要講下它自己獨有的方法。
????? ? NSSet也是一個集合,它和NSArray相似,能夠存放多個OC對象,可是不能存放基本數據,本身也不能改變。可是子類能夠改變。不同的是,NSSet沒有順序,而NSArray有順序。
? ? ??? ?三、NSDictionary
????????? ? 字典類也是一個集合類,它里面存放的都是鍵--值對,通過鍵(key)就能找到值(value)。
?????1?字典的創建和使用
// 創建單個鍵值對字典NSDictionary *dic = [NSDictionary dictionaryWithObject:@"葬花" forKey:@"姓"];// 創建多個鍵值對的字典NSDictionary *dic2 = [NSDictionary dictionaryWithObjectsAndKeys:@"葬花", @"姓",@"橋", @"名",@"44125", @"QQ", nil];// 高速創建字典NSDictionary *dic3 = @{@"姓" : @"葬花"};?????dic中存放著一個鍵值對,@"姓" 和 @"葬花" 。通過key索引就能找到相應的值:
id obj = [dic objectForKey:@"姓"]; // 高速查找值id obj3 = dic3[@"姓"];? ? ? ?2?可變字典
????? ? 和數組一樣?,它的一個子類,也能夠在已有的字典上加入鍵值對,刪除鍵值對。
????? ??創建可變字典
// 字典的遍歷NSArray *keys = [dic4 allKeys]; // 找出全部keyfor (int i=0; i<dic4.count; i++){NSString *key4 = keys[i]; NSString *obj4 = dic4[key4]; // 找出key相應的valueNSLog(@"%@ = %@", key4, obj4);} // block遍歷[dic4 enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop){NSLog(@"%@ = %@", key, obj);}]; ????數組與字典的嵌套?
// 數組中的元素為字典,每一個字典為一個人的信息NSArray *array = @[@{@"姓名" : @"葬花 橋", @"年齡" : @"120歲", @"QQ" : @"44125"},@{@"姓名" : @"SouBanaQiao", @"年齡" : @"20歲", @"QQ" : @"123456"},@{@"姓名" : @"一休", @"年齡" : @"13歲", @"QQ" : @"4568651"}];// 訪問數組中的字典元素中的鍵值對NSString *str = array[0][@"QQ"]; // 取出數組中的第0個字典元素,再取出字典key相應的valueNSLog(@"%@", str); ????? ? 不難理解,array是一個oc數組,其他的每一個元素為字典對象。注意這里的訪問與C中的二維數組的訪問的差別。這里僅僅是用了編譯器特性,它本質上是方法調用。
????? ?還能夠再嵌套
// 數組中的元素為字典,每一個字典為一個人的信息,元素0中的字典中的QQ有兩個NSArray *array2 = @[@{@"姓名" : @"葬花 橋", @"年齡" : @"120歲", @"QQ" : @[@"44125", @"1234"]},@{@"姓名" : @"SouBanaQiao", @"年齡" : @"20歲", @"QQ" : @"123456"},@{@"姓名" : @"一休", @"年齡" : @"13歲", @"QQ" : @"4568651"}];// 訪問數組中的字典元素中的鍵值對NSString *str2 = array2[0][@"QQ"][1];NSLog(@"%@", str2); ????? ? 這里是數組中套字典,再在字典中套數組,第0個元素字典中的QQ鍵相應的值是一個數組。所以這里會輸出
1234
小橋最后附上寫筆記用到的全部字典代碼
一、OC數組
????? ? OC數組是一個類,它也分不可變數組NSArray和可變數組NSMutableArray。
? ? 1?不可變數組的創建
// 創建一個不可變數組。元素為一個OC字符串對象 @"小橋"NSArray *array1 = [NSArray arrayWithObject:@"小橋"];// 創建一個不可變數組,元素為多個OC字符串對象NSArray *array2 = [NSArray arrayWithObjects:@"葬花 橋", @"120歲", @"來自武漢" , nil];// 高速創建一個不可變數組NSArray *array3 = @[@"葬花 橋", @"120歲", @"來自武漢"]; // 這是Xcode的一個特性。它會把這句自己主動轉換成上面那句 ????????? ?高速創建數組@[]和 @"" 一樣都是Xcode會自己主動替換成完整的語句。后面還有非常多其他的,像@{}等等。
? ???2?OC數組的元素個數統計
????? ? 在C中的數組中。數組的下標就是數組元素的個數,OC數組中提供了count對象方法,如:? ? ? ?
// 輸出array3的元素個數NSLog(@"數組元素個數=%ld", array3.count); ?????????array3.count ?調用數組的count方法就會返回元素的個數。
?
?? ? ?3?OC數組的訪問
????? ? C數組的訪問非常easy。a[i]?? ?這就是訪問數組a的第 i ?個元素,OC數組中訪問指定元素例如以下:
// 訪問數組元素NSLog(@"第%d個元素為%@", 0, [array3 objectAtIndex:0]); ? ?蘋果官方為和簡化。又提供了Xcode的新特性,OC數組的訪問變得簡單。能夠和C數組有一樣的寫法:
NSLog(@"第%d個元素為%@", 1 , array3[1]);<span style="font-family: Menlo; line-height: 1.6;">?</span>? ?簡化的寫法依舊是編譯器自己主動替換成上一個寫法,所以盡管寫法一樣但本質不同。
????? ? 1.C中的數組遍歷也能夠用在OC數組中:
// 1.傳統遍歷方法for (int i=0; i<array3.count; i++){NSLog(@"第%d個元素---%@", i, array3[i]);} ????????? ? 這是面向過程的數組遍歷,以下兩種是面向對象的數組遍歷:
????? ? 2.
// 2.OC遍歷unsigned long i = 0; // 記住當前下標for (NSString *obj in array3) // array3中的對象所有是OC字符串,假設不是同一種類型就用 id{i = [array3 indexOfObject:obj]; // 獲取當前元素的下標NSLog(@"第%ld個元素---%@", i, obj);} ????????? ? 這樣的遍歷不能獲取當前的下標,必須定義標志變量 i?
????? ? 3.bloc遍歷
// 3.block遍歷,調用enumerateObjectsUsingBlock: 方法。傳遞一個block參數[array3 enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) // 這些參數由方法enumerateObjectsUsingBlock傳遞過來{NSLog(@"第%ld個元素----%@", idx, obj); // 對數組元素的操作在block中進行}]; ????????? ? 按小橋的理解block遍歷并非在block中訪問的OC數組。而在?enumerateObjectsUsingBlock:這種方法中。當中????? ? ? ?????????的for循環中獲取數組當前元素賦值給obj,而我們能夠在block參數中寫我們要運行的一些代碼來操作數組元素,enumerateObjectsUsingBlock:方法每循環一次就調用一次block運行我們的代碼,當中 *stop是一個地址傳遞的標志參數,能夠控制循環是否繼續下去,假設在block中賦值為 YES 那么遍歷將停止。
?????5?可變數組的創建和使用
????? ? 因?為可變數組類是不可變數組類的子類,所以繼承了父類的方法。使用同樣,小橋這里主要講下它自己獨有的方法。
????? ? 加入元素?:
????? ? 加入元素后數組中就多了一個元素
? ?刪除元素 :
// 刪除元素所有元素 [array4 removeAllObjects];// 刪除指定元素[array4 removeObject:@"橋"];
????? ?這僅僅是兩個,還有非常多。小橋就不一一列舉了。
以上就是OC數組的內容。小橋把用到的所有代碼拷貝上來:
// // main.m // OC數組 // // Created by 葬花 橋 on 14-5-18. // Copyright (c) 2014年 itcast. All rights reserved. //#import <Foundation/Foundation.h>int main() {/*---------------------------------------------------------------數組的創建---------------------------------------------------------------*/// 創建一個不可變數組,元素為一個OC字符串對象 @"小橋"NSArray *array1 = [NSArray arrayWithObject:@"小橋"];// 創建一個不可變數組,元素為多個OC字符串對象NSArray *array2 = [NSArray arrayWithObjects:@"葬花 橋", @"120歲", @"來自武漢" , nil];// 高速創建一個不可變數組NSArray *array3 = @[@"葬花 橋", @"120歲", @"來自武漢"]; // 這是Xcode的一個特性。它會把這句自己主動轉換成上面那句// 輸出array3的元素個數// NSLog(@"數組元素個數=%ld", array3.count);// 訪問數組元素// NSLog(@"第%d個元素為%@", 0, [array3 objectAtIndex:0]);// NSLog(@"第%d個元素為%@", 1 , array3[1]);/*---------------------------------------------------------------數組的遍歷---------------------------------------------------------------*/// 1.傳統遍歷方法for (int i=0; i<array3.count; i++){// NSLog(@"第%d個元素---%@", i, array3[i]);}// 2.OC遍歷unsigned long i = 0; // 記住當前下標for (NSString *obj in array3) // array3中的對象所有是OC字符串。假設不是同一種類型就用 id{i = [array3 indexOfObject:obj]; // 獲取當前元素的下標//NSLog(@"第%ld個元素---%@", i, obj);}// 3.block遍歷,調用enumerateObjectsUsingBlock: 方法,傳遞一個block參數[array3 enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) // 這些參數由方法enumerateObjectsUsingBlock傳遞過來{// NSLog(@"第%ld個元素----%@", idx, obj); // 對數組元素的操作在block中進行if (idx == 1){*stop = YES; // 當當前索引為 1 時停止遍歷}}];/*---------------------------------------------------------------可變數組的創建和使用---------------------------------------------------------------*/// 子類有父類的方法NSMutableArray *array4 = [NSMutableArray arrayWithObjects:@"葬花", @"橋" , nil];// 加入元素[array4 addObject:@"今天天氣又不好"];// 刪除元素所有元素[array4 removeAllObjects];// 刪除指定元素[array4 removeObject:@"橋"];for (id obj in array4){NSLog(@"array4---%@", obj);}return 0; } 二、NSSet
????? ? NSSet也是一個集合,它和NSArray相似,能夠存放多個OC對象,可是不能存放基本數據,本身也不能改變。可是子類能夠改變。不同的是,NSSet沒有順序,而NSArray有順序。
? ? ??? ?三、NSDictionary
????????? ? 字典類也是一個集合類,它里面存放的都是鍵--值對,通過鍵(key)就能找到值(value)。
?????1?字典的創建和使用
// 創建單個鍵值對字典NSDictionary *dic = [NSDictionary dictionaryWithObject:@"葬花" forKey:@"姓"];// 創建多個鍵值對的字典NSDictionary *dic2 = [NSDictionary dictionaryWithObjectsAndKeys:@"葬花", @"姓",@"橋", @"名",@"44125", @"QQ", nil];// 高速創建字典NSDictionary *dic3 = @{@"姓" : @"葬花"};?????dic中存放著一個鍵值對,@"姓" 和 @"葬花" 。通過key索引就能找到相應的值:
id obj = [dic objectForKey:@"姓"]; // 高速查找值id obj3 = dic3[@"姓"];? ? ? ?2?可變字典
????? ? 和數組一樣?,它的一個子類,也能夠在已有的字典上加入鍵值對,刪除鍵值對。
????? ??創建可變字典
// 創建一個空的字典NSMutableDictionary *dic4 = [NSMutableDictionary dictionary];// 加入鍵值對[dic4 setObject:@"橋" forKey:@"名字"];[dic4 setObject:@"120歲" forKey:@"年齡"];[dic4 setObject:@"武漢" forKey:@"地址"];[dic4 setObject:@"44125" forKey:@"QQ"]; ? ? ? ??刪除鍵值對??? // 刪除鍵值對[dic4 removeObjectForKey:@"年齡"]; ?????字典遍歷????
// 字典的遍歷NSArray *keys = [dic4 allKeys]; // 找出全部keyfor (int i=0; i<dic4.count; i++){NSString *key4 = keys[i]; NSString *obj4 = dic4[key4]; // 找出key相應的valueNSLog(@"%@ = %@", key4, obj4);} // block遍歷[dic4 enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop){NSLog(@"%@ = %@", key, obj);}]; ????數組與字典的嵌套?
// 數組中的元素為字典,每一個字典為一個人的信息NSArray *array = @[@{@"姓名" : @"葬花 橋", @"年齡" : @"120歲", @"QQ" : @"44125"},@{@"姓名" : @"SouBanaQiao", @"年齡" : @"20歲", @"QQ" : @"123456"},@{@"姓名" : @"一休", @"年齡" : @"13歲", @"QQ" : @"4568651"}];// 訪問數組中的字典元素中的鍵值對NSString *str = array[0][@"QQ"]; // 取出數組中的第0個字典元素,再取出字典key相應的valueNSLog(@"%@", str); ????? ? 不難理解,array是一個oc數組,其他的每一個元素為字典對象。注意這里的訪問與C中的二維數組的訪問的差別。這里僅僅是用了編譯器特性,它本質上是方法調用。
????? ?還能夠再嵌套
// 數組中的元素為字典,每一個字典為一個人的信息,元素0中的字典中的QQ有兩個NSArray *array2 = @[@{@"姓名" : @"葬花 橋", @"年齡" : @"120歲", @"QQ" : @[@"44125", @"1234"]},@{@"姓名" : @"SouBanaQiao", @"年齡" : @"20歲", @"QQ" : @"123456"},@{@"姓名" : @"一休", @"年齡" : @"13歲", @"QQ" : @"4568651"}];// 訪問數組中的字典元素中的鍵值對NSString *str2 = array2[0][@"QQ"][1];NSLog(@"%@", str2); ????? ? 這里是數組中套字典,再在字典中套數組,第0個元素字典中的QQ鍵相應的值是一個數組。所以這里會輸出
1234
小橋最后附上寫筆記用到的全部字典代碼
// // main.m // NSDictionary // // Created by 葬花 橋 on 14-5-18. // Copyright (c) 2014年 itcast. All rights reserved. //#import <Foundation/Foundation.h>int main() {/*---------------------------------------------------------------字典的創建和使用---------------------------------------------------------------*/// 創建單個鍵值對字典NSDictionary *dic = [NSDictionary dictionaryWithObject:@"葬花" forKey:@"姓"];// 通過索引找到值id obj = [dic objectForKey:@"姓"];// 創建多個鍵值對的字典NSDictionary *dic2 = [NSDictionary dictionaryWithObjectsAndKeys:@"葬花", @"姓",@"橋", @"名",@"44125", @"QQ", nil];// 高速創建字典NSDictionary *dic3 = @{@"姓" : @"葬花"};// 高速查找值id obj3 = dic3[@"姓"];// NSLog(@"%@", obj3);/*---------------------------------------------------------------可變字典的創建和使用---------------------------------------------------------------*/// 創建一個空的字典NSMutableDictionary *dic4 = [NSMutableDictionary dictionary];// 加入鍵值對[dic4 setObject:@"橋" forKey:@"名字"];[dic4 setObject:@"120歲" forKey:@"年齡"];[dic4 setObject:@"武漢" forKey:@"地址"];[dic4 setObject:@"44125" forKey:@"QQ"];// 刪除鍵值對[dic4 removeObjectForKey:@"年齡"];// 字典的遍歷NSArray *keys = [dic4 allKeys]; // 找出全部keyfor (int i=0; i<dic4.count; i++){NSString *key4 = keys[i];NSString *obj4 = dic4[key4]; // 找出key相應的value// NSLog(@"%@ = %@", key4, obj4);}// block遍歷[dic4 enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop){// NSLog(@"%@ = %@", key, obj);}];/*---------------------------------------------------------------字典與數組的嵌套---------------------------------------------------------------*/// 數組中的元素為字典,每一個字典為一個人的信息NSArray *array = @[@{@"姓名" : @"葬花 橋", @"年齡" : @"120歲", @"QQ" : @"44125"},@{@"姓名" : @"SouBanaQiao", @"年齡" : @"20歲", @"QQ" : @"123456"},@{@"姓名" : @"一休", @"年齡" : @"13歲", @"QQ" : @"4568651"}];// 訪問數組中的字典元素中的鍵值對NSString *str = array[0][@"QQ"]; // 取出數組中的第0個字典元素。再取出字典key相應的value// NSLog(@"%@", str);// 數組中的元素為字典。每一個字典為一個人的信息,元素0中的字典中的QQ有兩個NSArray *array2 = @[@{@"姓名" : @"葬花 橋", @"年齡" : @"120歲", @"QQ" : @[@"44125", @"1234"]},@{@"姓名" : @"SouBanaQiao", @"年齡" : @"20歲", @"QQ" : @"123456"},@{@"姓名" : @"一休", @"年齡" : @"13歲", @"QQ" : @"4568651"}];// 訪問數組中的字典元素中的鍵值對NSString *str2 = array2[0][@"QQ"][1];NSLog(@"%@", str2);return 0; }
版權聲明:本文博客原創文章。博客,未經同意,不得轉載。
轉載于:https://www.cnblogs.com/bhlsheji/p/4641172.html
總結
以上是生活随笔為你收集整理的OC本学习笔记Foundatio框架集的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 浅谈.Net WebService开发
- 下一篇: Introduction to Big