對(duì)象自動(dòng)釋放池的使用
釋放池的作用
autorelease對(duì)象方法
@autoreleasepool關(guān)鍵字的使用
Person *p = [Person new];
@autoreleasepool{
[p autorelease];
}
自動(dòng)釋放池的嵌套(棧方式來(lái)存儲(chǔ)):自動(dòng)釋放池棧,存儲(chǔ)多個(gè)自動(dòng)釋放池,對(duì)象每次加入到棧頂?shù)淖詣?dòng)釋放池中
封裝一個(gè)initWithXxx方法, 在其中使用"對(duì)象自動(dòng)釋放池" * 釋放池的作用
//快速創(chuàng)建類(lèi)的類(lèi)方法定義
+(instancetype)person{return [[[ self alloc] init] autorelease]; } Person *p = [Person person];ARC介紹
ARC概念介紹
ARC的判斷原則/強(qiáng)弱指針介紹
循環(huán)strong問(wèn)題
MRC代碼轉(zhuǎn)ARC代碼
ARC項(xiàng)目如何兼容MRC的代碼項(xiàng)目---> 編譯選項(xiàng) ---->雙擊類(lèi)文件----> -fno-objc-arc
MRC項(xiàng)目轉(zhuǎn)換為ARC
- Category分類(lèi)
分類(lèi)的作用:
將一個(gè)類(lèi)中的不同方法分到多個(gè)不同的文件中存儲(chǔ), 便于對(duì)類(lèi)進(jìn)行模塊化設(shè)計(jì)、團(tuán)隊(duì)合作開(kāi)發(fā)。
可以在不修改原來(lái)類(lèi)的基礎(chǔ)上, 為這個(gè)類(lèi)擴(kuò)充一些方法.
分類(lèi)中只能增加"方法", 不能增加成員變量等。
//原類(lèi)聲明
@interface
Person:NSObject { int _age; }@end//原類(lèi)實(shí)現(xiàn)@implementation Person { int_weight; //私有的成員變量 } -(void)setAge:(int)age{ } -(int)age{ }@end
//分類(lèi)
@interface
Person (base)@property int age; //相當(dāng)于給_age進(jìn)行g(shù)et和set方法的聲明 @end
分類(lèi)可以訪(fǎng)問(wèn)原來(lái)類(lèi)中的成員變量
主類(lèi)與分類(lèi)中方法的調(diào)用優(yōu)先級(jí)問(wèn)題:
當(dāng)分類(lèi)與主類(lèi)中都有同一個(gè)方法的時(shí)候, 優(yōu)先調(diào)用分類(lèi)中的方法。
當(dāng)多個(gè)分類(lèi)中都有同樣的一個(gè)方法的時(shí)候, 優(yōu)先調(diào)用最后一個(gè)參與編譯的分類(lèi)中的方法。
非正式協(xié)議
方式: 通過(guò)分來(lái)來(lái)實(shí)現(xiàn)非正式協(xié)議原理: 就是給NSObject類(lèi)添加分類(lèi)來(lái)給其他類(lèi)添加方法
應(yīng)用: NSString + countNumForString
類(lèi)擴(kuò)展(匿名分類(lèi))
類(lèi)擴(kuò)展是寫(xiě)在.m文件中的, 為當(dāng)前類(lèi)擴(kuò)展一些私有的成員. 1> 作用: 為某個(gè)類(lèi)擴(kuò)充一些私有的成員變量和方法. 延展也是為類(lèi)定義私有方法的一種方式
"類(lèi)擴(kuò)展"對(duì)比"分類(lèi)", 就少了一個(gè)分類(lèi)名稱(chēng), 因此也有人稱(chēng)它為"匿名分類(lèi)".
- block
block是一種數(shù)據(jù)類(lèi)型, 可以使用這種數(shù)據(jù)類(lèi)型定義變量, 并賦值。
block數(shù)據(jù)類(lèi)型在使用前需要先定義該數(shù)據(jù)類(lèi)型, 然后再使用(就像使用Person類(lèi)一樣, 先定義一個(gè)Person類(lèi), 然后再通過(guò)Person類(lèi)聲明一個(gè)Person類(lèi)型變量)。 * block這種數(shù)據(jù)類(lèi)型用來(lái)保存一個(gè)方法、函數(shù)、一段代碼
必須掌握: block的定義語(yǔ)法、使用場(chǎng)景
無(wú)參無(wú)返回值
void
(^變量名)(); 變量名 = ^(){ }; 或者變量名=^{ };
有參無(wú)返回值
有參有返回值
返回值類(lèi)型 (^變量名) (參數(shù)列表);
變量名 = ^(){}
使用inlineBlock輔助編寫(xiě)block代碼
int
(^block)(int,int) = ^(int n, int m){};