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