OC總結(jié)(2)

6.數(shù)組

系統(tǒng)提供的數(shù)組類:類似于C語言中的數(shù)組的功能

數(shù)組是一個(gè)大容器,數(shù)組中可以儲(chǔ)存不同類型的對(duì)象,但必須要保證數(shù)組中儲(chǔ)存的都是對(duì)象.

oc 中提供了兩類數(shù)組:一類是NSArray(不可變數(shù)組) 一類是NSMutableArray(可變數(shù)組)

可變與不可變的區(qū)別:可變意味著可以對(duì)原有對(duì)象進(jìn)行操作,不可變就意味著一旦創(chuàng)建,內(nèi)容就不可改變

一.創(chuàng)建數(shù)組

1.使用初始化方法創(chuàng)建數(shù)組

NSArray *array = [[NSArray alloc] initWithObjects:@"a", @"b", @"c", @"d", nil];

2.使用便利構(gòu)造器方法創(chuàng)建數(shù)組

NSArray *array1 = [NSArray arrayWithObjects:@"a", @"b", @"c", @"d", nil];

3.字面量

NSArray *array2 ?= @[@"a", @"b", @"c", @"d"];

二.數(shù)組的使用

1.數(shù)組元素的個(gè)數(shù)

NSUInteger count = array.count;

2.獲取數(shù)組元素

NSString *name1 = [array objectAtIndex:0];

字面量取法

NSString *name2 = array[2];

NSString *name3 = [array firstObject];

NSString *name4 = [array lastObject];

當(dāng)數(shù)組元素為空的時(shí)候妒峦,使用firstObject以及l(fā)astObject可以保證程序安全,不會(huì)崩潰,返回值是nil,但使用objectAtIndex:時(shí)兵睛,如果數(shù)組為空,則程序崩潰.

NSArray *nameArrayOne = [NSArray arrayWithObjects:@"a", @"b", @"c", @"d", nil];

NSArray *nameArrayTwo = [NSArray arrayWithObjects:@"e", @"f", @"g", @"h", nil];

3.找某個(gè)對(duì)象對(duì)應(yīng)的下標(biāo)

NSUInteger index = [nameArrayOne indexOfObject:@"a"]; ? ?

4.數(shù)組中是否包含某個(gè)對(duì)象

BOOL isTrue = [nameArrayOne containsObject:@"a"]; ? ? ? ? ?

NSLog(@"isTrue == %d", isTrue);

5.判斷數(shù)組是否相等

BOOL isEqual = [nameArrayOne isEqualToArray:nameArrayTwo];

NSLog(@"isEqual == %d", isEqual);

6.NSArray和NSString之間的轉(zhuǎn)換

(1)字符串到數(shù)組

NSString *string = @"www.reibang.com";

NSArray *array = [string componentsSeparatedByString:@"."]; ?// 以.進(jìn)行分割

(2)數(shù)組到字符串

NSArray *myArray = [NSArray arrayWithObjects:@"北京", @"大連", @"上海", @"廣東", @"鄭州", nil];

NSString *myString = [myArray componentsJoinedByString:@"&"]; ?// 以&將數(shù)組中的對(duì)象連成一個(gè)字符串

三.可變數(shù)組

1.創(chuàng)建(3種方式) ? ? ? ?

?initWithCapacity: ? ?預(yù)先開辟一個(gè)對(duì)象容量(多少對(duì)象自己定義),使用完這些對(duì)象后,自動(dòng)在開辟一個(gè)對(duì)象容量。

NSMutableArray *myArray = [[NSMutableArray alloc] initWithCapacity:1];

NSMutableArray *yourArray = [NSMutableArray arrayWithCapacity:1];

NSMutableArray *bigArray = [NSMutableArray array];

2.增加數(shù)據(jù)? ?

?addObject: 在數(shù)組的最后面添加

[bigArray addObject:@"a"];

在指定位置插入一個(gè)元素

[bigArray insertObject:@"heihei" atIndex:1];

3.刪除

刪除指定元素

[bigArray removeObject:@"a"]; ? // 直接刪除對(duì)象

[bigArray removeObjectAtIndex:0]; ? // 通過對(duì)象下標(biāo)刪除

替換

[bigArray replaceObjectAtIndex:1 withObject:@"haha"];

交換指定位置的兩個(gè)元素

[bigArray exchangeObjectAtIndex:0 withObjectAtIndex:1];

刪除全部

[bigArray removeAllObjects];

數(shù)組小結(jié):數(shù)組是用來管理一組有序的元素的集合笛丙,必須保證數(shù)組中存放的都是對(duì)象,而且數(shù)組中可以存放相同元素.


7.字典

字典:用來存儲(chǔ)具有一一對(duì)應(yīng)關(guān)系的數(shù)據(jù),本質(zhì)上也是一個(gè)大容器? 一個(gè)key對(duì)應(yīng)一個(gè)value? key不可以重復(fù)

字典本身是無序的? 不解析數(shù)據(jù)的順序? 里面的key和value是有序的

字典里的數(shù)據(jù)是成對(duì)存在的 通過key找到value

分為不可變NSDictionary? 和 可變NSMutableDictionary

一.創(chuàng)建字典

1.初始化

NSDictionary *dic = [[NSDictionary alloc] initWithObjectsAndKeys:@"zhangSan", @"name", @"nan", @"sex", nil];

2.便利構(gòu)造器

NSDictionary *dic1 = [NSDictionary dictionaryWithObjectsAndKeys:@"zhangSan", @"name", @"nan", @"sex", nil];

3.字面量

NSDictionary *dic2 = @{@"name":@"zhangSan", @"sex":@"nan"};

二.字典的使用

1.求字典的元素個(gè)數(shù)

NSUInteger count = dic2.count;

2.將字典中所有的key放到一個(gè)數(shù)組中

NSArray *keys = dic2.allKeys;

3.將字典中所有的value放到一個(gè)數(shù)組中

NSArray *values = dic2.allValues;

4.字典取值

NSString *name1 = [dic2 objectForKey:@"name"];

5.判斷字典是否為空 **

BOOL a = dic2.allKeys.count == 0;

三.可變字典

NSMutableDictionary *dic = [[NSMutableDictionary alloc] initWithObjectsAndKeys:@"zhangsan", @"name",@"nan", @"sex", nil];

1.字典添加一個(gè)元素

[dic setObject:@"18" forKey:@"age"];

2.修改元素

[dic setObject:@"liSi" forKey:@"name"];

setObject:forKey: 工作原理:先查找字典中有沒有對(duì)應(yīng)的key胚鸯,如果有笨鸡,則修改key對(duì)應(yīng)的value姜钳,如果沒有則把key-value做為元素添加到字典中.

3.移除元素

[dic removeObjectForKey:@"age"];

4.移除所有元素

[dic removeAllObjects];


8.集合

特點(diǎn):無序性,互異性,本質(zhì)上是一個(gè)大容器.

分為不可變NSSet 和 可變NSMutableSet

一.不可變集合

NSSet *mySet = [[NSSet alloc] initWithObjects:@"aa", @"bb", @"cc", @"dd", @"aa", @"bb", @"bb", @"cc", nil];

1.元素的個(gè)數(shù)

NSUInteger count = mySet.count;

2.獲取集合中的元素

NSString *string1 = [mySet anyObject];

3.將集合中的元素取到一個(gè)數(shù)組中

NSArray *myArray = mySet.allObjects;

二.可變集合

NSMutableSet *mySet = [[NSMutableSet alloc] initWithObjects:@"aa", @"bb", nil];

1.添加元素

[mySet addObject:@"cc"];

[mySet addObject:@"bb"];

2.移除元素

[mySet removeObject:@"aa"];

3.打印集合中的元素

for (NSString *str in mySet) {

NSLog(@"%@", str);

}


9.數(shù)組,字典,集合的區(qū)別

相同點(diǎn):都是oc中的容器類,可以存儲(chǔ)多個(gè)元素,但是元素必須都是對(duì)象,不限制對(duì)象的類型.

1.使用場(chǎng)景:

數(shù)組:用來管理一組有序的元素的集合.

字典:用來管理一組具有一一對(duì)應(yīng)關(guān)系的數(shù)據(jù)的集合.

集合:用來管理一組無序,并且具有互異性的元素的集合.

2.特點(diǎn):

數(shù)組:有序,并且元素可以重復(fù)使用.

字典:無序,key-value是字典中的一個(gè)元素,key是唯一的,一個(gè)key只能對(duì)應(yīng)一個(gè)value,但是一個(gè)value可以對(duì)應(yīng)多個(gè)key.

集合:無序,元素具有互異性.

3.取值方式:

數(shù)組:通過下標(biāo)獲取元素.

字典:通過key值獲取元素.

集合:anyObject? 獲得一個(gè)數(shù)組? foreign遍歷


10.內(nèi)存管理

一.堆區(qū)內(nèi)存的三種常見問題:

1.野指針問題:訪問沒有所有權(quán)的內(nèi)存,如果想安全的訪問,必須確备缜牛空間還在.

2.過度釋放:對(duì)同一塊空間多次釋放,程序立即crash.

3.內(nèi)存泄漏:空間使用完之后沒有及時(shí)釋放,存在安全隱患

二.內(nèi)存的三種管理機(jī)制:

1.垃圾回收機(jī)制(gc):由系統(tǒng)來管理內(nèi)存泰讽,系統(tǒng)識(shí)別空間何時(shí)不使用,自動(dòng)回收空間,不適于iOS開發(fā)已卸,Java采用該機(jī)制.

2.MRC:手動(dòng)引用計(jì)數(shù)機(jī)制,由開發(fā)人員開辟和釋放空間,并顯示添加引用計(jì)數(shù)的修改代碼,能夠靈活的決定內(nèi)存何時(shí)釋放.

3.ARC:自動(dòng)引用計(jì)數(shù)機(jī)制累澡,是ios 5.0推出的,也蘋果默認(rèn)的內(nèi)存管理機(jī)制,本質(zhì)還是基于MRC,只不過對(duì)于引用計(jì)數(shù)的修改是由系統(tǒng)自動(dòng)實(shí)現(xiàn)的.

alloc: +1? retain: +1? copy: +1

autorelease 如果在自動(dòng)釋放池內(nèi),自動(dòng)釋放池結(jié)束就釋放了愧哟,如果在自動(dòng)釋放池外,會(huì)找到距離最近的自動(dòng)釋放池蕊梧,那個(gè)自動(dòng)釋放池結(jié)束就回釋放

三.內(nèi)存管理黃金法則:

如果你對(duì)一個(gè)對(duì)象做了alloc,copy,retain操作之后,你就擁有了對(duì)象的使用權(quán),你就有責(zé)任對(duì)它進(jìn)行release,活著autorelease.

簡(jiǎn)單理解:就看自己有沒有使用alloc,copy,retain這三個(gè)方法,如果使用了就必須對(duì)應(yīng)上release或者autorelease, 如果沒有使用,就和自己無關(guān),不用處理.

四.內(nèi)存管理問題:

1.為什么本該引用計(jì)數(shù)為0的,為什么最終還是1

引用計(jì)數(shù)只是告訴系統(tǒng)是否需要回收空間,當(dāng)最后一次release的時(shí)候,發(fā)現(xiàn)引用計(jì)數(shù)為1,

就說明只有自己在使用,所以自己release之后直接回收空間即可,無需再將引用計(jì)數(shù)置0.

2.滿足什么條件才會(huì)有引用計(jì)數(shù)的概念

1.必須是oc的對(duì)象

2.空間必須在堆區(qū)

(其它區(qū)的引用計(jì)數(shù)都是一個(gè)無限大的數(shù))

五.dealloc方法 ? ? ? ?當(dāng)本類的對(duì)象引用計(jì)數(shù)為0的時(shí)候會(huì)自動(dòng)調(diào)用這個(gè)方法

- (void)dealloc{

[super dealloc];

}


11.協(xié)議

一.創(chuàng)建協(xié)議

@protocol 聲明協(xié)議的關(guān)鍵字

方法聲明在 @protocol 和? @end? 中間

例如:@protocol sayHello<NSObject>? ? //? sayHello協(xié)議的名字

@required ? ? ? ?// 必須實(shí)現(xiàn)的方法(默認(rèn)的)

- (void)sayByBy;

@optional ? ? ? // 不是必須實(shí)現(xiàn)的方法

- (void)heihei;

@end

二. 簽訂協(xié)議? ? 其它類中

例如:@interface Person : NSObject<sayHello>? ? ? // 簽訂協(xié)議 多個(gè)協(xié)議簽訂< , , >

三.實(shí)現(xiàn)協(xié)議方法? (必須實(shí)現(xiàn)的一定要寫)? 其它類中

- (void)sayByBy{

}

四.代理

1.代理第一步:聲明協(xié)議

2.代理第二部分:聲明代理

3.代理人第三步:代理人執(zhí)行協(xié)議方法

4.代理第四步:簽訂協(xié)議

5.代理第五步:成為代理人

6.代理人第六步:實(shí)現(xiàn)協(xié)議方法



最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末腮介,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子叠洗,更是在濱河造成了極大的恐慌旅东,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,946評(píng)論 6 518
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件抵代,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡荤牍,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,336評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門参淫,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人涎才,你說我怎么就攤上這事劳淆。” “怎么了泪勒?”我有些...
    開封第一講書人閱讀 169,716評(píng)論 0 364
  • 文/不壞的土叔 我叫張陵棕兼,是天一觀的道長(zhǎng)抵乓。 經(jīng)常有香客問我伴挚,道長(zhǎng)灾炭,這世上最難降的妖魔是什么茎芋? 我笑而不...
    開封第一講書人閱讀 60,222評(píng)論 1 300
  • 正文 為了忘掉前任蜈出,我火速辦了婚禮,結(jié)果婚禮上铡原,老公的妹妹穿的比我還像新娘。我一直安慰自己燕刻,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,223評(píng)論 6 398
  • 文/花漫 我一把揭開白布卵洗。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪籍滴。 梳的紋絲不亂的頭發(fā)上榴啸,一...
    開封第一講書人閱讀 52,807評(píng)論 1 314
  • 那天,我揣著相機(jī)與錄音鸥印,去河邊找鬼勋功。 笑死库说,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的潜的。 我是一名探鬼主播骚揍,決...
    沈念sama閱讀 41,235評(píng)論 3 424
  • 文/蒼蘭香墨 我猛地睜開眼啰挪,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了亡呵?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 40,189評(píng)論 0 277
  • 序言:老撾萬榮一對(duì)情侶失蹤锰什,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后汁胆,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,712評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡嫩码,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,775評(píng)論 3 343
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了谢谦。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,926評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡回挽,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出千劈,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 36,580評(píng)論 5 351
  • 正文 年R本政府宣布暗甥,位于F島的核電站,受9級(jí)特大地震影響捉捅,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜棒口,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,259評(píng)論 3 336
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望无牵。 院中可真熱鬧,春花似錦茎毁、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,750評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽崔梗。三九已至夜只,卻和暖如春蒜魄,著一層夾襖步出監(jiān)牢的瞬間扔亥,已是汗流浹背谈为。 一陣腳步聲響...
    開封第一講書人閱讀 33,867評(píng)論 1 274
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留伞鲫,地道東北人粘茄。 一個(gè)月前我還...
    沈念sama閱讀 49,368評(píng)論 3 379
  • 正文 我出身青樓秕脓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親吠架。 傳聞我的和親對(duì)象是個(gè)殘疾皇子芙贫,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,930評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容

  • 大綱 26.Protocol-協(xié)議 27.delegate-代理 28.Foundation框架介紹 29.NSS...
    天天想念閱讀 1,364評(píng)論 0 2
  • 1. 熟悉Git的基本流程 git clone git add -A git commit -m " " git ...
    9bf19a4010ab閱讀 1,642評(píng)論 0 2
  • 下面是我最近兩年學(xué)習(xí)OC中的一些基礎(chǔ)知識(shí)磺平,對(duì)于學(xué)習(xí)OC基礎(chǔ)知識(shí)的人可能有些幫助,拿出來分享一下拣挪,還是那句話不喜勿噴...
    小小趙紙農(nóng)閱讀 2,607評(píng)論 1 7
  • 一擦酌、類和對(duì)象 1.定義:類是具有相同特征和行為的事物的抽象菠劝,對(duì)象是類的具體化赊舶,類是對(duì)象的類型闸英。 2.面向?qū)ο蟮娜?..
    陳亮宇閱讀 390評(píng)論 1 6
  • 總有人會(huì)彷徨介袜,也總有人常在夢(mèng)里游蕩甫何。 時(shí)間久了遇伞,事情多了辙喂,很難在一兩篇文章里窮盡事情的細(xì)節(jié),也很難表達(dá)出我對(duì)當(dāng)事人...
    半夏長(zhǎng)安閱讀 541評(píng)論 0 0