OC基礎(chǔ)知識(shí) iOS

第一講:類、對(duì)象

1OC簡(jiǎn)史

1)NextStep公司的由來,cocoa的由來

?????? NeXT是由蘋果公司的創(chuàng)辦人喬布斯于1985年被蘋果公司辭退后同年成立。然后在1996年已4億美元收購(gòu)下了NeXT猎醇。


3)面向?qū)ο笳Z(yǔ)言 :

?????? 面向過程就是分析出解決問題所需要的步驟,然后用函數(shù)把這些步驟一步一步實(shí)現(xiàn)努溃,使用的時(shí)候一個(gè)一個(gè)依次調(diào)用就可以了

?????? 面向?qū)ο笫前褬?gòu)成問題事物分解出各個(gè)對(duì)象硫嘶,建立對(duì)象的母的不是為了完成一個(gè)步驟,而是為了描述某個(gè)事物在整個(gè)解決問題的步驟中的行為梧税。面向?qū)ο笫且怨δ軄韯澐謫栴}沦疾,而不是步驟称近。比如說要把五子棋改成圍棋,如果你是面向過程的設(shè)計(jì)哮塞,那么五子棋的規(guī)則分布在了你的程序每一個(gè)角落刨秆,要改動(dòng)還不如重寫。而面向?qū)ο蟮脑O(shè)計(jì)你只需要改動(dòng)規(guī)則對(duì)象就可以了忆畅。五子棋和圍棋的區(qū)別不就是規(guī)則不同嗎衡未?

?????? 五子棋:面向過程的設(shè)計(jì)思路就是首先分析問題的步驟:1.開始游戲,2.黑白雙方家凯,3缓醋、繪制畫面,4绊诲,判斷輸贏送粱,5,輪到白子掂之,6抗俄,繪制畫面,7世舰,判斷輸贏动雹,7,返回步驟2冯乘、9.輸出最后結(jié)果洽胶。把上面每個(gè)步驟分別用函數(shù)來實(shí)現(xiàn)晒夹,問題就解決了裆馒。

?????? 面向?qū)ο蟮脑O(shè)計(jì)則是從另外的思路來解決問題。整個(gè)五子棋可以分為1.黑白雙方丐怯,這兩方的行為是一模一樣的喷好。2、棋盤系統(tǒng)读跷,負(fù)責(zé)繪制畫面梗搅。3、規(guī)則系統(tǒng)效览,負(fù)責(zé)額判定諸如犯規(guī)无切、輸贏、等丐枉。第一類對(duì)象(玩家對(duì)象)負(fù)責(zé)用戶輸入哆键,并告知第二對(duì)象(棋盤對(duì)象)妻子布局的變化,棋盤對(duì)象接受到了棋子的變化瘦锹,棋盤對(duì)象接收到了妻子的變化就要負(fù)責(zé)在屏幕上面顯示這種變化籍嘹,同事利用第三類對(duì)象(規(guī)則系統(tǒng))來對(duì)棋局進(jìn)行判定闪盔。

2、面向?qū)ο笕筇匦裕?/b>

1)封裝

?????? 封裝的核心就是:不關(guān)心對(duì)象的實(shí)現(xiàn)方法辱士,不要告訴我你是怎么做泪掀,只要做就可以了。我只要結(jié)果

2)繼承

?????? 繼承可以使得之類具有父類的各種屬性和方法颂碘,子類可以重寫父類的某些方法异赫,同時(shí)也可以在子類追加新的屬性和方法

3)多態(tài)

?? 多態(tài):同一操作作用于不同的對(duì)象,可以有不用的解釋头岔,產(chǎn)生不同的執(zhí)行結(jié)果祝辣。

有多種表現(xiàn)形式:1.重寫 :配合繼承使用,進(jìn)行父類方法的重寫

????????????? ?2.方法重載切油,方法名可以相同蝙斜,參數(shù)個(gè)數(shù),或者參數(shù)類型澎胡、返回值不同

各自的含義及如何體現(xiàn)孕荠;

3、OC語(yǔ)言的特點(diǎn):

1)封閉式語(yǔ)言攻谁;底層源代碼不開源

2)動(dòng)態(tài)語(yǔ)言稚伍;是指程序在運(yùn)行時(shí)可以改變其結(jié)構(gòu):新的函數(shù)可以被引進(jìn),已有的函

????????????? ?? 數(shù)可以被刪除等結(jié)構(gòu)上的變化??????? ?

3)C語(yǔ)言擴(kuò)展集或則子集戚宦;C語(yǔ)言的所有關(guān)鍵字及語(yǔ)法可以在OC環(huán)境下正常編譯運(yùn)行


4个曙、類、對(duì)象

1)創(chuàng)建類受楼、創(chuàng)建對(duì)象垦搬, 快捷鍵使用;

?????? 創(chuàng)建工程及類—>command +shift+N à new projectà EnteràProject Name? à command +N à cocoa class à?1.類名2.繼承自的類3.選擇編程語(yǔ)言àComplete


2)類艳汽、對(duì)象的關(guān)系猴贰;

??? 類和對(duì)象的關(guān)系就如同模具制作出的物品之間的關(guān)系。一個(gè)類為它的全部對(duì)象給出了一個(gè)統(tǒng)一的定義河狐,而他的每個(gè)對(duì)象則是符合這種定義的一個(gè)實(shí)體欢顷,因此類和對(duì)象的關(guān)系就是抽象和具體的關(guān)系床三。

3)@public、@protected、@private關(guān)鍵字的使用及作用按傅;

? private是當(dāng)前類中可以使用的依鸥,在這個(gè)類中的其他地方都不可以使用眶熬,public是在所有可以訪問到這個(gè)類的地方都可以使用侵佃。Protected是應(yīng)用與父類當(dāng)中的,也就是說父類中寫了一個(gè)protected的變量雏赦,則在其他的子類中也可以訪問到這個(gè)變量劫笙,但是在父類中如果用到了private的話那么除了這個(gè)類可以訪問到這個(gè)變量意外其他地方都訪問不到芙扎,而public可以說是在任何地方都可以訪問到

5、#import填大、#include戒洼、@class、<> 允华、 “”各自的含義圈浇;

?????? ?????? 1)、#include 會(huì)造成重復(fù)引用的問題靴寂。例如:class A磷蜀、class B 都引用了class

C ,class D若引用了class A與 class B ,就會(huì)報(bào)重復(fù)引用的錯(cuò)誤百炬。

?

????????????? 2)褐隆、#import功能與include功能相同,不過它避免了重復(fù)引用的問題剖踊。

????????????? 3)庶弃、@class只是告訴編譯器有這個(gè)類存在,但是類具體是如何實(shí)現(xiàn)的就不用告訴編譯器德澈。

4)歇攻、“”,用于對(duì)用戶自定義的文件的引用梆造,編譯器首先會(huì)去用戶目錄下查找缴守,然后去安裝目錄,最后去系統(tǒng)目錄查找

5)镇辉、<>屡穗,用于對(duì)系統(tǒng)文件的引用,編譯器會(huì)在系統(tǒng)目錄下查找該文件摊聋。

?????? 6鸡捐、@有何作用栈暇?

??? 關(guān)鍵字起始符麻裁,打印對(duì)象

7、初始化對(duì)象的過程實(shí)現(xiàn)

1.首先要有一個(gè)類源祈,例:Person

2.在類中定義成員變量:(NSString *)name煎源;

3.重寫init方法:自定義初始化方法:- (instancetype)initWithName:(NSString *)name;

第二講:方法香缺、繼承

1.方法的類型分類:+手销、-

2、方法調(diào)用語(yǔ)法格式:[]图张、點(diǎn)語(yǔ)法

3锋拖、各種方法的定義語(yǔ)法格式

1)無返回值诈悍、無參數(shù)

2)無返回值、帶一個(gè)參數(shù)

3)無返回值兽埃、帶多個(gè)參數(shù)

4)有返回值侥钳、無參數(shù)

5)有返回值、帶一個(gè)參數(shù)

6)有返回值柄错、帶多個(gè)參數(shù)

4舷夺、特殊方法:

1)初始化方法(自定義初始化方法、便利構(gòu)造器初始化方法售貌,系統(tǒng)自帶初始化方法init)

1.???? -(instancetype)initWithName : (NSString *)name{

self? =[super init];

if???? (self){

? ??? _name?= [name retain];

?}

return?self;

}

? 2.?+ (Person *) personWithName : (NSString*)name{

???? Person? *person?= [ [Person alloc ] initWithName :name];

?? [person? autorelease];

?? return?? person;

}

3.

2)setter()给猾、getter()

?? 1. – (void)setName : (NSString*)name{

???????? if? (_name != name){

????????? [_name release];

? ????????? _name =? [name?retain];

????? }

}

?? - (NSString *)name{

???? return? name;

?}

[if !supportLists]4)[endif]description()

?? - (NSString *)description{

??? return? [NSString?stringWithFormmat:@”%@”,yanglingshi shabi];

}

5、繼承

1)單繼承

??? 一個(gè)類只能繼承一個(gè)父類颂跨,父類還可以有父類

2)self敢伸、super的使用

?? 當(dāng)使用self調(diào)用方法時(shí),會(huì)從當(dāng)前類的方法列表中開始找恒削,如果沒有详拙,就從父類中再找,蔓同;而當(dāng)使用super時(shí)饶辙,則從父類的方法列表中開始找,然后調(diào)用父類這個(gè)方法斑粱。

3)繼承的優(yōu)點(diǎn)

???繼承的優(yōu)缺點(diǎn):優(yōu)點(diǎn)新的實(shí)現(xiàn)很容易弃揽,因?yàn)榇蟛糠质抢^承而來的很容易修改和擴(kuò)展已有的實(shí)現(xiàn)缺點(diǎn)打破了封裝,因?yàn)榛愊蜃宇惐┞读藢?shí)現(xiàn)細(xì)節(jié)白盒重用则北,因?yàn)榛惖膬?nèi)部細(xì)節(jié)通常對(duì)子類是可見的當(dāng)父類的實(shí)現(xiàn)改變時(shí)可能要相應(yīng)的對(duì)子類做出改變不能在運(yùn)行時(shí)改變由父類繼承來的實(shí)現(xiàn)?

只有當(dāng)下列條件滿足時(shí)才考慮使用繼承:子類是一種特殊的類型矿微,而不只是父類的一個(gè)角色子類的實(shí)例不需要變成另一個(gè)類的對(duì)象子類擴(kuò)展,而不是覆蓋或者使父類的功能失效


6尚揣、多態(tài)

1)概念

2)方法重寫涌矢、方法重載



第三講:數(shù)據(jù)類型

[if !supportLists]1、??[endif]OC數(shù)據(jù)類型:typedef快骗、對(duì)象

? Typedef類型包括:CGFloat 娜庇、NSInteger、NSpoint

可以理解為基本數(shù)據(jù)類型方篮。對(duì)象類型名秀,系統(tǒng)提供的有NSNumber、NSValue藕溅、NSString匕得、 NSArray 、NSDictionary巾表、

[if !supportLists]2汁掠、??[endif]NSNumber對(duì)簡(jiǎn)單數(shù)據(jù)類型進(jìn)行封裝和解封裝

封裝:基本數(shù)據(jù)類型à對(duì)象類型略吨,方法:【類名numberwith…】

解封裝:對(duì)象類型à基本數(shù)據(jù)類型,方法:[對(duì)象? integerValue];

[if !supportLists]3考阱、??[endif]NSNumberFormatter對(duì)NSNumber數(shù)據(jù)處理格式

步驟:1.首先創(chuàng)建一個(gè)NSNumberFormatter格式轉(zhuǎn)換器對(duì)象

NSNumberFormatter *formatted= [[NSNumberFormatter? alloc]init];

2.s設(shè)置格式

[formatter setNumberStyle :枚舉類型]晋南;

3.創(chuàng)建一個(gè)NSNumberFormatter對(duì)象。打印即可

4羔砾、NSValue對(duì)結(jié)構(gòu)體類型進(jìn)行封裝和解封裝

封裝:結(jié)構(gòu)體有4種:point负间、rect、size姜凄、range政溃。

? [NsVlaue? valueWith…];

解封裝:[value? rectValue];

5、NSString不可變字符串

1)初始化 :三種:

? 1. NSString? *str =?[NSString? alloc]initWithFormat:str1];

?2. NSString??? *str?= [NSString?? stringWithFormat: @”1”];

3.? NSString?? *str?= @”21345”;//iOS 5之后的定義方式

?2)獲取長(zhǎng)度态秧、獲取某個(gè)字符

【str? length】董虱;

[str?? characterAtIndex:3];

3)字符串截取(頭申鱼、尾愤诱、中間范圍)

[str? substringToIndex:1];//從頭開始到某個(gè)下標(biāo)結(jié)束

?? [str? substringFormIndex:1];//從某個(gè)位置截取到尾部

?[str? substringWithRange:CGRange];

[if !supportLists]5)[endif]字符串拼接(多種方式)

?? //1.初始化方式

.[stringWithFormat:@”%@,%@”,字符串1,字符串2];

2.在尾部拼接

[str1?? stringByAppendingString:字符串1];

3.隨意拼接捐友,可以在@“? ”加入任意內(nèi)容

[str? stringByAppendingFormat:@”%@, %@”,字符串1淫半,字符串2];

? ??4.

把原字符串某個(gè)范圍用字符串替換

[str?stringByReplacingCharactersInRange :CGRange withString :字符串]:

[if !supportLists]6)[endif]字符串查找(含xcode6新添加的方法)(頭匣砖、尾科吭、各處)

? 1.頭部? (Bool)[hasPrefix:str1];//是否有前綴字符串str1

2.尾部???(BOOL)[has

Suffix:str1];//是否有后綴字符串str1

3、各處:NSrange range = [str? rangeOfString:@“待查詢字符串”]

? If ( 0 == range.length? && range.location == NSNotFound ){

?????? NSLog(@”%@”,);

}

[if !supportLists]7)[endif]字符串比較(多種比較方式)

[if !supportLists]1.???[endif]compare:str1 返回值 枚舉類型??? 3個(gè)值

[if !supportLists]2.???[endif]isEqualToString:str1? 返回值?? bool類型? 2個(gè)值


[if !supportLists]8)[endif]字符串替換

???? [str? stringByReplacingWithString…:.];

[if !supportLists]9)[endif]字符串與其他基本數(shù)據(jù)類型的轉(zhuǎn)換(int猴鲫、float对人、double、大小寫拂共、array等)

? ?????????? [str? (int牺弄、float、double)Value];

大小寫 :1.大寫:uppercaseString

?????? ??? 2.小寫:lowercaseString

????????????? 3.每個(gè)單詞首字母大寫:capitalizedString


6宜狐、NSMutableString可變字符串

1)初始化 三種:一般初始化和便利構(gòu)造以及第三種我叫不來但很通用

1. NSMutableString? *mstr? = [[ NSMutableString alloc]initWithFormat:@“%@”,str1];

2.NSMutableString? *mstr? = [NSMutableString stringWithFormat:@””];

3. NSMutableString? *mstr? =[ NSMutableString string];

2)插入

insertString:(NSString *) aString atIndex : (NSUinterger)loc;

3)刪除

?????? deleteCharactersInRange: (NSRange )range;

4)追加

?? appendString : (NSString*)aString;

? appendString : (NSString *) format

5)替換

?? repleaseeCharactersInRange? : (NSRange) range withString : (NSString*)aString;


7势告、NSString和NSMutableString的關(guān)系

?????? NSMutableString? 繼承自NSString

8、NSDate

1)初始化

?????? NSDate? *date?= [ NSDate date];//賦予的是格林威治時(shí)間

2)計(jì)算時(shí)間差

?????? [date1? timeIntervalSinceDate :date2 ];

3)比較兩個(gè)時(shí)間

?????? 1.compare

?????? 2.isEqualToDate

?????? 3.earlierDate

?????? 4.laterDate

4)同NSDateFormatter轉(zhuǎn)換時(shí)間為某種特定格式

?????? //1.初始化一個(gè)時(shí)間格式轉(zhuǎn)化器

?????? NSDateFormatter? *formatter1 = [ [NSDateFormatter?? alloc ] init];

?? //2.設(shè)置formatter1的格式

?????? [formatter1? setDateFormat :@”yyyyMMdd”];

.//3.時(shí)間轉(zhuǎn)換成字符串

?????? NSString? *str? =[formatter1? stringFormDate:date1];

//4.字符串轉(zhuǎn)換成date? 格式與上邊蛇者的格式一致

[formatter1? dateFormString :@”20150828”];


5)快速得到當(dāng)前時(shí)間的中文完整格式


? ??? NSDate? [ dateWithTimeInter : 3600*8?? sinceDate :date1];


6)NSDate和NSString之間的轉(zhuǎn)換:(需要格式轉(zhuǎn)化器作為中間質(zhì)進(jìn)行轉(zhuǎn)換)


?????? //1.首先:初始化一個(gè)時(shí)間格式轉(zhuǎn)換器

NSDateFormatter? *formatter =[[NSDateFormatter alloc]init];

?????? //2.設(shè)置formater的格式

?????? [formatter?? setDateFormate: @”yy年MM/ dd HH:mm :ss”]

?????? //3.通過格式轉(zhuǎn)換器進(jìn)行NSDate 和NSString 的轉(zhuǎn)換

1)肌厨、NSDate à? NSString?

?????? NSString??*str? =[formatter?? stringFormDate? :? date];

2)培慌、NSString à? NSDate

?????? NSDate?? *date?=? [formatter?? dateFromString : @” 2015年8月/19 11:59:37”];



9柑爸、NSTimer

1)兩種初始化的區(qū)別(NSRunLoop的使用)

?????? 1.一般初始化:-initWithFireDate:interval:target:selector:userinfo:repeats:

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

+ scheduledTimerWithTimeInterVal: invocation :repeats;

?????? 3.NSRunLoop;

?????? NSRunLoop的本質(zhì)是一個(gè)消息機(jī)制的處理模式。用于消息的傳遞盒音,在Cocoa里邊不用自己定義WM_COMMAd_XXX這樣的宏來標(biāo)識(shí)某個(gè)消息表鳍。Apple在設(shè)計(jì)消息的時(shí)候就采用了RunLoop馅而;

(?? http://blog.csdn.net/davidsph/article/details/7899760? )有詳細(xì)關(guān)于NSTimer的資料

2)結(jié)合日期,完成一個(gè)計(jì)時(shí)器和倒計(jì)時(shí)功能:初始化出錯(cuò)了




第四講:集合

[if !supportLists]1譬圣、??[endif]集合三大類:數(shù)組瓮恭、字典、集(有序集合厘熟、無序集合)

?

數(shù)組:NSArray :儲(chǔ)存對(duì)象類型屯蹦,同一個(gè)數(shù)組可以放得對(duì)

?? ??????????????象類型可以不同

字典:NSDictionary:鍵、值對(duì)應(yīng)存儲(chǔ)數(shù)據(jù):

?????? ?集:NSSet ,與數(shù)組绳姨、字典功能相同登澜。存放的數(shù)據(jù)不重復(fù)且為亂序;在搜索一個(gè)一個(gè)元素時(shí):NSSet比NSArray效率高飘庄。(hash散列排布)脑蠕;

?

2、nil標(biāo)示跪削、NSNull谴仙、NULL對(duì)象的區(qū)別

?????? nil?????:是一個(gè)對(duì)象,值為0碾盐;數(shù)組結(jié)尾用nil

?????? NULL? :是基本數(shù)據(jù)類型為空

?????? NSNull:和nil本質(zhì)是一樣的晃跺,但在初始化一個(gè)數(shù)組空間大小

????????????為0時(shí),用NSArray? *arr =?[ NSNull?? null];

[if !supportLists]4毫玖、??[endif]NSArray不可變數(shù)組(對(duì)象哼审、有序)

[if !supportLists]1)????[endif]初始化

[if !supportLists]1.???[endif]NSArray? *arr = [[ NSArray alloc] initwithObject:….];//一般初始化

[if !supportLists]2.???[endif][ NSArray?arrWithArray:aArray]; //用一個(gè)數(shù)組初始化

[if !supportLists]3.???[endif][NSArray?? arrayWithObjects:數(shù)組元素,多個(gè)用逗號(hào)隔開]孕豹。

4. NSArray?? *arr = @[@”中國(guó)”涩盾,@(1234),student];

?????? ????????????? //可以存放的有: 字符串? 励背,數(shù)值對(duì)象春霍,自定義對(duì)象

[if !supportLists]2)????[endif]獲取元素個(gè)數(shù)

[?arr?? count];

[if !supportLists]3)????[endif]獲得某個(gè)下標(biāo)下的元素值、獲得某個(gè)元素所在的下標(biāo)

[if !supportLists]1.???[endif]某個(gè)下標(biāo)的元素:[arrobjectAtIndex : i];

[if !supportLists]2.???[endif]第一個(gè)元素?? :[arr? firstObject ];

[if !supportLists]3.???[endif]最后一個(gè)元素:[ arr? lastObject];

[if !supportLists]4.???[endif]取某個(gè)元素的下標(biāo):[arr? indexOfObject:數(shù)組某個(gè)元素]叶眉;

[if !supportLists]4)????[endif]截取

臥槽址儒。。衅疙。莲趣。


[if !supportLists]5)????[endif]遍歷(三種遍歷方式:普通,快速饱溢,枚舉)

[if !supportLists]1.???[endif]for (int i? = 0 ;? i? < [arr?count] ; i++){

?NSLog (@”%@”, [ objectOfIndex :i ] );

}

[if !supportLists]2.???[endif]增強(qiáng)for

for ( id? obj?? in??array ){

NSLog(@”%@”,obj);

}

[if !supportLists]3.???[endif]迭代器

NSEnumerator? *enumeraror? = [ arr???objectEnumerator];

Id?? obj? = nil;

While? ( obj? = [enumerator nextObject]){

???? NSLog (@”%@”,obj);

}

[if !supportLists]4.???[endif]Block 塊遍歷

? [arr?? enumeratorObjectsUsingBlock:

?????? ^(id? obj, NSUInteger? index , BOOL??*stop){

NSLog (@” %@ ” , obj );

?????? //若終斷循環(huán)

?????? *stop?? =? YES喧伞;

}];


[if !supportLists]6)????[endif]排序(三種排序方式)

[if !supportLists]1.???[endif]sortedArrayUsingSlector

[if !supportLists]2.???[endif]sortArrayUsingComparator

[if !supportLists]3.???[endif]sortedArrayUsingDescriptors&sortUSingDescriptors


7)簡(jiǎn)寫@[object,…]

4、NSMutableArray可變數(shù)組

1)繼承于NSArray

2)初始化

3)添加元素

?????? 1.addobject:

?????? 2.insertObject : (id) anObjectatIndex:

4)刪除元素

?????? removeLastObject?移除隊(duì)尾元素

?????? removeObjectAtIndex: i

5)交換兩個(gè)下標(biāo)下的元素

?????? exchangeObjectAtIndex :0? withObjectAtIndex :3

5、NSDictionary(鍵值對(duì)潘鲫,無序翁逞,鍵唯一)

1)初始化

?????? 1.一般初始化:alloc + initWithObjectAndKeys

?????? 2.遍歷初始化:dictionaryWithObjectAndKeys, nil

?????? 3.快速生成 :@{ @”qq”: @”123456”, @”pass”: @”my love”}

2)取值(key=value)

?????? ?objectForKey


3)遍歷

?????? 1.allValue??? allKey

?????? 2.for-in

4)簡(jiǎn)寫:@{key : value,…};

6、NSMutableDictionary可變字典

1)初始化

繼承自父類NSDictionary , 與父類初始化一樣

2)添加

?????? setObject :??? forKey:

3)移除

?????? removeObjectForKey

7溉仑、NSSet挖函、NSMutableSet

1)初始化

?????? 1.一般初始化: alloc + initWithObjects : ,?? ,?nil;

?????? 2.遍歷初始化:setWithObject:

?????? 3.利用數(shù)組初始化:setWithArray:

2)與數(shù)組的結(jié)合使用

數(shù)組à 集? :setWithArray

集? à 數(shù)組:allObjects;


8、集合類分別在控制臺(tái)的顯示形式浊竟,如何取出控制臺(tái)有效數(shù)據(jù)

9怨喘、綜合使用,完成一個(gè)通訊錄的過程



第五講:內(nèi)存管理

1振定、retainCount?? 引用計(jì)數(shù)

2必怜、alloc、retain吩案、copy棚赔、new、release徘郭、autorelease分別對(duì)retainCount的影響

?????? 1).alloc靠益、allocwithZone,new,引用計(jì)數(shù)+1

?????? 2).retain手動(dòng)為該對(duì)象+1

?????? 3)copy? 對(duì)應(yīng)引用計(jì)數(shù)+1

?????? 4)mutableCopy

, 創(chuàng)建一個(gè)新對(duì)象残揉,新對(duì)象引用計(jì)數(shù)為1

?????? 5)release胧后。手動(dòng)為該對(duì)象引用計(jì)數(shù)-1

6)autorelease :加入自動(dòng)釋放池,當(dāng)自動(dòng)釋放池釋放時(shí)抱环,對(duì)

??????????????????????????????????? 象引用計(jì)數(shù)-1

?

3. 各個(gè)方法中應(yīng)注意的內(nèi)存管理:

?

1)自定義初始化方法壳快;

?????? ?- (instancetype) initWithName :(NSString *)name? age: (NSInteger)age{

?????? self? = [super init];

?? if?????? (self){

?????? _name? = [name?copy];

?????? _age?? = age;

?????? }

?????? return? self;

}

2)便利構(gòu)造器初始化方法;

+ (Person *)personInitWithName : (NSString *)name?? age : (NSInteger) age{

Person?? *person? =? [[Person? alloc ]initWithName :name age:age];

???? [person? autorelease];

Retrun? person;

}


3)對(duì)象的setter()中正確的書寫形式

- (void) setName : ( NSString *)name{

??? [ _name? release ];

?????? _name = nil;

?????? _name = [ name? retain];

}

4. NSAutoreleasePool的作用

在自動(dòng)釋放池內(nèi)部對(duì)象 會(huì)在釋放池release之后一起釋放

5. dealloc的作用

[if !supportLists]1.??[endif]MRC模式:釋放對(duì)象占用的內(nèi)存空間镇草。

[if !supportLists]2.??[endif]ARC模式:釋放 系統(tǒng)無法釋放的該對(duì)象占用的資源眶痰,或者其他對(duì)象對(duì)該對(duì)象的引用。

6.集合中的內(nèi)存管理

??????

[if !supportLists]7.??[endif]內(nèi)存管理原則

[if !supportLists]1.??[endif]創(chuàng)建了就要release

[if !supportLists]2.??[endif]誰retain?誰release

?

?

8梯啤、程序在運(yùn)行時(shí)的內(nèi)存分配

?????? 內(nèi)存分為五大區(qū)域(由上到下):棧區(qū)竖伯、堆區(qū),BSS段因宇、數(shù)據(jù)區(qū)七婴、代碼段。(BSS段察滑、數(shù)據(jù)區(qū)打厘、代碼段)三塊是在程序啟動(dòng)的時(shí)候加載的。棧區(qū)從高到底分配地址贺辰,堆區(qū)由低到高分配户盯。程序猿只需要管理的內(nèi)存只是在堆區(qū)的對(duì)象嵌施。而對(duì)象的指針在棧中,指向的內(nèi)容在堆區(qū)先舷。

1.堆區(qū):存放程序運(yùn)行過程中艰管,動(dòng)態(tài)分配的存儲(chǔ)空間

2.棧區(qū):局部變量

3.BSS段:沒有初始化的全局變量和靜態(tài)變量

4.數(shù)據(jù)區(qū):已經(jīng)初始化的全局變量和靜態(tài)變量滓侍,以及字符串常量

5.代碼段:程序編譯后代碼的內(nèi)容

? ???ààà? 關(guān)系圖在云盤蒋川;

第六講:屬性

1、屬性關(guān)鍵字@property

2撩笆、涉及到的參數(shù):nonatomic捺球、atomic、retain夕冲、assign氮兵、copy、readwrite歹鱼、readonly泣栈、getter(改變名字)、setter弥姻、weak南片、strong,分別有何作用庭敦?何時(shí)使用疼进?

一、原子性

[if !supportLists]1.??[endif]Nonatomic 對(duì)屬性不加鎖秧廉,多線程下線程不安全伞广,但速率快

[if !supportLists]2.??[endif]?atomic,對(duì)屬性加鎖疼电,多線程下線程安全嚼锄,默認(rèn)值

?

二、set方法處理

[if !supportLists]1.??[endif]Retain , 先release原來的值蔽豺,再retain新值

[if !supportLists]2.??[endif]assign区丑, 直接賦值,再retain新值

[if !supportLists]3.??[endif]copy?? 茫虽,先release原來的值刊苍,再copy新值

?

三、讀寫屬性:

1. readwrite >生成getter濒析、setter方法正什,默認(rèn)值

2. readonly?>只生成getter方法

四、強(qiáng)弱引用号杏。

1. ARC模式下>strong修飾對(duì)象婴氮,強(qiáng)引用斯棒。相當(dāng)于retain,

2.MRC模式下>weak ,修飾對(duì)象弱引用主经,相當(dāng)于assign直接賦值

?

[if !supportLists]2荣暮、??[endif]屬性的優(yōu)點(diǎn)及缺點(diǎn)

屬性就是OC提供給程序員快速生成成員變量的訪問器(set/get)的語(yǔ)法,提供了點(diǎn)語(yǔ)法更加方便間接使用訪問器

?

4罩驻、補(bǔ)講內(nèi)容:

1)copy和mutableCopy的區(qū)別及使用

?????? copy (拿NSString做例子)

[if !supportLists]1.???[endif]對(duì)于不可變字符串>>淺拷貝穗酥,拷貝后是不可變類型字符串,引用計(jì)數(shù)2

[if !supportLists]2.???[endif]對(duì)于可變字符串?>> 深拷貝惠遏,拷貝后是可變類型字符串砾跃。引用計(jì)數(shù)1

?????? mutableCopy?

[if !supportLists]1.????????[endif]對(duì)于不可變字符串 >>深拷貝,拷貝后的是可變類型字符串节吮,引用計(jì)數(shù)1

[if !supportLists]2.????????[endif]對(duì)于可變字符串 ??>>深拷貝抽高,拷貝后的是可變類型字符串,引用計(jì)數(shù)1


2)深復(fù)制和淺復(fù)制

?????? 深拷貝 >>拷貝的是指針透绩,不會(huì)開辟新的內(nèi)存空間

?????? 淺拷貝 >>拷貝的是內(nèi)容翘骂,要開辟被復(fù)制相同大小,相同內(nèi)容的內(nèi)存空間帚豪,

???????????????????? 只是地址不一樣


補(bǔ)充 :Student? ?*std? =[ [Student? alloc ]init]碳竟;

?????? ? Student??*std1?=[[std?? copy];//需要在Student類重寫copy方法



第七講:?jiǎn)卫J健⒂^察者模式

1志鞍、單例模式的定義及使用過程

1)為何使用單例瞭亮,單例用來處理哪些問題的?用在哪些場(chǎng)合固棚?

?? ????????? 1.單例模式和靜態(tài)方法相似统翩,但他們一個(gè)是面向?qū)ο螅粋€(gè)是基于對(duì)象的此洲。

如果一個(gè)方法和他所在類的實(shí)例對(duì)象無關(guān)厂汗,那么它就是靜態(tài)的,反之他就是非靜態(tài)的就可以使用單例模式了呜师。

? ??? 2.單例模式用于處理一種只需要初始化一次娶桦,并且在程序運(yùn)行過程中不被釋放調(diào)的對(duì)象。

?????? 3.單例模式用在頁(yè)面間的傳值汁汗,(UI頁(yè)面)衷畦,一個(gè)不被再次初始化的變量


2)static在單例中的作用?

?????? 不加static知牌,是可能被釋放掉得祈争。

3)如何保證單例對(duì)象是唯一的

?????? >重寫初始化方法

?????? >重寫allocWithZone方法

?????? >重寫copyWithZone方法

?????? >重寫retain??????????? 方法

?????? >重寫release????????? 方法

?????? >重寫retainCount?? 方法

[if !supportLists]3、??[endif]簡(jiǎn)單單例和完整單例的寫法

?

+(UserCenter*)standardUserCenter{

??? if (!instance) {//保證第一次創(chuàng)建成功后不在新建對(duì)象

??????? instance =

[[UserCenter alloc]init];

??? }

??? return instance;

}

+(instancetype)allocWithZone:(struct _NSZone*)zone

{

??? if (!instance) {//保證第一次創(chuàng)建成功后不在新建對(duì)象

????? return?? [super allocWithZone:zone];

}


??? return nil;

}


//重寫copy


- (id)copyWithZone:(NSZone*)zone{

??? return self;

}



//非ARC模式下更改retain? release

-(instancetype)retain{

??? return self;

}


- (oneway void)release{


}


- (NSUInteger)retainCount{

??? return NSNotFound;

}

?

3角寸、KVC菩混、KVO的描述

1)KVC的作用及使用忿墅;

?KVC觀察者模式,Key? Value? Code通過setVale? forKey :賦值


2)KVO三大步驟及監(jiān)聽過程

?????? 步驟:1.為對(duì)象添加觀察路徑沮峡,判斷需要觀察哪一個(gè)屬性

?????? [_dog addObserver:self forKeyPath:@"dogName"? options:NSKeyValueObservingOptionNew context:nil]

????????????? 2.重寫觀察響應(yīng)

? ???- (void)observeValueForKeyPath:(NSString *)keyPath

ofObject:(id)object change:(NSDictionary *)change context:(void*)context

{

??? NSLog(@"媳婦回老家了");

??? NSLog(@"%@",change);

}

????????????? 3. 測(cè)試

Dog? *bmw =? [[Dog? alloc]init];

???????bmw.dogName? =@"byd";

???????Student?*ren? =? [[Student? alloc]init];


???????ren.dog? = bmw;

???????[renaddOB];?? //給狗添加觀察

??????? [bmwsetValue:@"比亞迪" forKeyPath:@"dogName"];


??????? [rensetValue:@"bmw" forKeyPath:@"dog.dogName"];


4疚脐、補(bǔ)講內(nèi)容:

1)NSNotification

2)NSNotificationCenter

3)通知三大步驟

4)和KVO的區(qū)別

5、NSUserDefaults的定義和使用

NSUserDefaults? *userDefaults = [NSUserDefaults standardUserDefaults];

???????NSArray*arr?=? @[student.sName, [NSNumber numberWithInteger:student.sAge]];

???????[arr? writeToFile:@"/Users/rimi/Desktop/123.txt" atomically:NO];

???????[userDefaultssynchronize];


??????? NSArray*arr1? = [NSArray arrayWithContentsOfFile:@"/Users/rimi/Desktop/123.txt"];

[if !supportLists]1)????[endif]注意事項(xiàng)

? 如果程序以外退出邢疙,數(shù)據(jù)不能及時(shí)保存到本地棍弄,加上synchronize立即寫入

2)本地持久化的操作

3)存儲(chǔ)數(shù)據(jù)


第八講:類目、延展秘症、協(xié)議

1照卦、類目式矫、延展的定義和使用

類目:為抑制的類增加新的方法@Category

延展:為自己類的實(shí)現(xiàn)文件中添加類目來聲明私有方法

@

?????????? ???? //延展 給類添加私有方法或者成員變量

@interface Student____(){//延展的定義格式


??? //私有成員變量

NSInteger_count;

}

//定義一個(gè)私有方法

- (NSString*)returnGenderString;


//私有屬性

@property (nonatomic ,strong)NSString?? *myName;


@end

2乡摹、[endif]類目延展的區(qū)別和聯(lián)系

延展是另外一種類目,只不過把類目寫在類的實(shí)現(xiàn)文件中

??????

4采转、類目的優(yōu)勢(shì)和局限性

類目的優(yōu)勢(shì):1.通過類目加入的方法聪廉,與原類沒有登記差別

2.可以擴(kuò)展別人實(shí)現(xiàn)的類,而且不需要獲得原始類的源代碼

?????? 3.類目添加的方法故慈,類被繼承的時(shí)候也一并會(huì)被繼承

?

4板熊、協(xié)議的定義和使用,協(xié)議涉及到的關(guān)鍵字

?????? >協(xié)議就是聲明一大堆方法察绷,這些方法未于任何類關(guān)聯(lián)

?????? >協(xié)議就像一個(gè)條款一樣干签,一旦某個(gè)對(duì)象遵守了這個(gè)協(xié)議就要實(shí)現(xiàn)協(xié)議里邊的相關(guān)方法

?????? >關(guān)鍵字? @protocol

?

4、代理和協(xié)議的區(qū)別及聯(lián)系

>>委托代理(degegate),把某個(gè)對(duì)象要做的事情委托給別的對(duì)象去做拆撼,那么別的對(duì)象就是這個(gè)對(duì)象的代理容劳, 代替他來打理要做的事情。反映到程序中闸度,首先要明確一個(gè)對(duì)象的委托方是哪個(gè)對(duì)象竭贩,委托所做的內(nèi)容是什么。

>>協(xié)議聲明了可以被任何類實(shí)現(xiàn)的方法

協(xié)議不是類莺禁,它是定義了一個(gè)其他對(duì)象可以實(shí)現(xiàn)的借口

如果在某個(gè)類中實(shí)現(xiàn)了協(xié)議中某個(gè)方法留量,也就是實(shí)現(xiàn)了這個(gè)那個(gè)協(xié)議

協(xié)議經(jīng)常用來實(shí)現(xiàn)委托對(duì)象,一個(gè)委托對(duì)象是一種用來協(xié)同或者代表其他對(duì)象的特殊對(duì)象哟冬。

委托楼熄,就是調(diào)用自己定義方法,別的類來實(shí)現(xiàn)浩峡。

6可岂、委托模式的講解,以及同notification的區(qū)別

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末红符,一起剝皮案震驚了整個(gè)濱河市青柄,隨后出現(xiàn)的幾起案子伐债,更是在濱河造成了極大的恐慌,老刑警劉巖致开,帶你破解...
    沈念sama閱讀 207,248評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件峰锁,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡双戳,警方通過查閱死者的電腦和手機(jī)虹蒋,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,681評(píng)論 2 381
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來飒货,“玉大人魄衅,你說我怎么就攤上這事√粮ǎ” “怎么了晃虫?”我有些...
    開封第一講書人閱讀 153,443評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)扣墩。 經(jīng)常有香客問我哲银,道長(zhǎng),這世上最難降的妖魔是什么呻惕? 我笑而不...
    開封第一講書人閱讀 55,475評(píng)論 1 279
  • 正文 為了忘掉前任荆责,我火速辦了婚禮,結(jié)果婚禮上亚脆,老公的妹妹穿的比我還像新娘做院。我一直安慰自己,他們只是感情好濒持,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,458評(píng)論 5 374
  • 文/花漫 我一把揭開白布键耕。 她就那樣靜靜地躺著,像睡著了一般弥喉。 火紅的嫁衣襯著肌膚如雪郁竟。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,185評(píng)論 1 284
  • 那天由境,我揣著相機(jī)與錄音棚亩,去河邊找鬼。 笑死虏杰,一個(gè)胖子當(dāng)著我的面吹牛讥蟆,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播纺阔,決...
    沈念sama閱讀 38,451評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼瘸彤,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了笛钝?” 一聲冷哼從身側(cè)響起质况,我...
    開封第一講書人閱讀 37,112評(píng)論 0 261
  • 序言:老撾萬榮一對(duì)情侶失蹤愕宋,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后结榄,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體中贝,經(jīng)...
    沈念sama閱讀 43,609評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,083評(píng)論 2 325
  • 正文 我和宋清朗相戀三年臼朗,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了邻寿。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,163評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡视哑,死狀恐怖绣否,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情挡毅,我是刑警寧澤蒜撮,帶...
    沈念sama閱讀 33,803評(píng)論 4 323
  • 正文 年R本政府宣布,位于F島的核電站慷嗜,受9級(jí)特大地震影響淀弹,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜庆械,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,357評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望菌赖。 院中可真熱鬧缭乘,春花似錦、人聲如沸琉用。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,357評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)邑时。三九已至奴紧,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間晶丘,已是汗流浹背黍氮。 一陣腳步聲響...
    開封第一講書人閱讀 31,590評(píng)論 1 261
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留浅浮,地道東北人沫浆。 一個(gè)月前我還...
    沈念sama閱讀 45,636評(píng)論 2 355
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像滚秩,于是被迫代替她去往敵國(guó)和親专执。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,925評(píng)論 2 344

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

  • 文章圖片上傳不正常郁油,如需文檔本股,可聯(lián)系微信:1017429387 目錄 1 安裝... 4 1.1 配置探針... ...
    Mrhappy_a7eb閱讀 6,285評(píng)論 0 5
  • Lua 5.1 參考手冊(cè) by Roberto Ierusalimschy, Luiz Henrique de F...
    蘇黎九歌閱讀 13,748評(píng)論 0 38
  • 想過想要的會(huì)是什么 想過要淌過的那條河 你像一個(gè)鐘壞在那里 每天只做一件事 就是什么也不做(第三攀痊,四,五行是《我是...
    江城妖怪閱讀 225評(píng)論 0 1
  • 一個(gè)朋友對(duì)我說,她在學(xué)校新媒體部凿叠,老師要求每個(gè)人在一周內(nèi)推廣夠800個(gè)涩笤,也就是說,7天的時(shí)間要讓800個(gè)人關(guān)注昂屑蹬碧!...
    汎舟閱讀 449評(píng)論 2 2
  • 最美是克制再克制之后的情不自禁 第一次注意到她,是研一籃球賽 馬尾辮還有大長(zhǎng)腿炒刁,坐在記分臺(tái)的我一本正經(jīng)又心不在焉的...
    小麥子diudiudiu閱讀 388評(píng)論 0 1