一.內存問題
(1).內存溢出
(2).野指針(過度釋放)
二.內存管理方式:
(1)MRC:手動管理引用計數.對對象完成后需要release.
Man * man = [[Man alloc]init];
[man release];
// 集合類型
(i). addObject 會使引用計數 + 1
(ii).removeObject 會使引用計數 - 1
(2).ARC:自動管理引用計數(常用.基于MRC)
(i).strong (ARC,強引用) 會使引用計數 + 1
(ii).weak (應用于對象類型(NSObject子類),弱引用,對象被釋放時,會自動置空)
(iii).retain(MRC,強引用)會使引用計數 + 1
(iv).copy(拷貝)原來引用計數不變,新生成的 + 1
(v).assign(用戶與簡單的數據類型,不會產生引用計數)
三.引用計數
(1).alloc,copy,retain 會使引用計數 + 1
(2).release,autorelease 會使引用計數 - 1
(3)當引用計數 = 0 時,會調用dealloc方法 引用計數不變(為1)
四.實現對對象的拷貝
(1).需要簽訂NSCoping協議
(2).需要實現copyWithZone方法
Man * newMan = [man copy];
NSLog(@"newMan : %@ - oldMan : %@",newMan,man);
五.KVC(NSObject) Key-Value-Coding鍵值編碼,間接訪問成員變量的方式
六.只要是NSObject的子類,就包含以下方法
(1)valueForKey
(2) valueForKeyPath
(3) setValue: forKeyPath:
七.在工程下使用文件
// 加在Build Phases下的編譯source下
(1).如果在ARC工程下使用MRC的文件
-fno-objc-arc
(2). 在MRC的工程下使用ARC的文件
-fobjc-arc
三.類的擴展方式
(1).category(類目)
創建:
(i).通過Objective-C File創建
(ii).會產生兩個文件 .h .m
(iii).文件名會以 類名+Category名
使用:
(i). 向對應文件中添加需要添加方法
(ii). 引入到你對應要使用的位置
(2).extends(延展)
延展,一般定義在.m中,其中聲明一些私有的屬性/方法
(3).delegate(代理)
在之前簡書上已整理
(4).繼承
四.iOS9的新特性
(1).nonnull 修飾的屬性,對應setter和getter方法
(2).nullable 修飾的屬性,對應setter和getter方法
(3).null_resetable
五.泛型(帶泛型的容器(規定了容器中所存儲的類型))
(1).泛型數組
NSMutableArray<NSString *> * array = [NSMutableArray arrayWithObjects:@"123", nil];
(2).泛型字典
NSMutableDictionary<NSString *,NSString *> * dic = [NSMutableDictionary dictionaryWithObjectsAndKeys:@"小花兒",@"name", nil];
(3).自定義泛型
Truck<Pserson *> * truck = [[Truck alloc]init];
Truck.h
// 自定義泛型聲明方式
//@interface 類名<泛型名>: 父類
// 自定義泛型,聲明后,泛型名,可以應用在屬性,方法中
// 泛型名 等效于 類型修飾(例: NSString *)
@interface Truck<__covariant objectType> : NSObject
六.協變性,逆變性
(1). __covariant 協變性 子類在給父類賦值時,自動強轉
//Truck<NSArray*> Truck<NSMutableArray*>
truck1 = truck2;
(2).__contravariant 逆變性 父類給子類賦值,自動強轉(暫時不知道應用何處)
truck2 = truck1;
七.__kindOf
加__kindof修飾后,返回的類型及其子類型,都可以接收這個返回值
Truck * truckKindOf = [[Truck alloc]init];
NSMutableArray * arr = [truckKindOf returnArray];
Truck.h
-(__kindof NSArray *)returnArray;
Truck.m
// 方法的返回值,是一個不可變數組/可變數組
-(__kindof NSArray *)returnArray{
// return @[];
return [NSMutableArray array];
}