OC總結(二)

一.內存問題
(1).內存溢出
(2).野指針(過度釋放)
二.內存管理方式:

(1)MRC:手動管理引用計數(shù).對對象完成后需要release.
Man * man = [[Man alloc]init];
[man release];

// 集合類型
(i). addObject 會使引用計數(shù) + 1
(ii).removeObject 會使引用計數(shù) - 1

(2).ARC:自動管理引用計數(shù)(常用.基于MRC)

(i).strong (ARC,強引用) 會使引用計數(shù) + 1
(ii).weak (應用于對象類型(NSObject子類),弱引用,對象被釋放時,會自動置空)
(iii).retain(MRC,強引用)會使引用計數(shù) + 1
(iv).copy(拷貝)原來引用計數(shù)不變,新生成的 + 1
(v).assign(用戶與簡單的數(shù)據(jù)類型,不會產(chǎn)生引用計數(shù))
三.引用計數(shù)
(1).alloc,copy,retain 會使引用計數(shù) + 1
(2).release,autorelease 會使引用計數(shù) - 1
(3)當引用計數(shù) = 0 時,會調用dealloc方法 引用計數(shù)不變(為1)
四.實現(xiàn)對對象的拷貝
(1).需要簽訂NSCoping協(xié)議
(2).需要實現(xiàn)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(類目)
創(chuàng)建:

屏幕快照 2016-07-16 下午2.55.05.png

屏幕快照 2016-07-16 下午2.55.59.png

(i).通過Objective-C File創(chuàng)建
(ii).會產(chǎn)生兩個文件 .h .m
(iii).文件名會以 類名+Category名
使用:
(i). 向對應文件中添加需要添加方法
(ii). 引入到你對應要使用的位置
(2).extends(延展)
延展,一般定義在.m中,其中聲明一些私有的屬性/方法
(3).delegate(代理)
在之前簡書上已整理
(4).繼承
四.iOS9的新特性
(1).nonnull 修飾的屬性,對應setter和getter方法
(2).nullable 修飾的屬性,對應setter和getter方法
(3).null_resetable
五.泛型(帶泛型的容器(規(guī)定了容器中所存儲的類型))
(1).泛型數(shù)組

 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

六.協(xié)變性,逆變性
(1). __covariant 協(xié)變性 子類在給父類賦值時,自動強轉

//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

// 方法的返回值,是一個不可變數(shù)組/可變數(shù)組
-(__kindof NSArray *)returnArray{
//    return @[];
return [NSMutableArray array];
}
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • 1. 熟悉Git的基本流程 git clone git add -A git commit -m " " git ...
    9bf19a4010ab閱讀 1,783評論 0 2
  • OC基礎總結 重新回過頭看這些基礎知識,對許多知識點都有新的認識,擁有堅實的基礎才能更快的成長。 OC內存管理 -...
    xx_cc閱讀 2,886評論 1 21
  • 內存管理 簡述OC中內存管理機制。與retain配對使用的方法是dealloc還是release,為什么?需要與a...
    丶逐漸閱讀 2,080評論 1 16
  • 一、深復制和淺復制的區(qū)別? 1、淺復制:只是復制了指向對象的指針,即兩個指針指向同一塊內存單元!而不復制指向對象的...
    iOS_Alex閱讀 1,521評論 1 27
  • 一個人怯怯的走在路上 那些秀麗的景色,浮光掠影 走一段,忘一段 偶爾,疲累時駐足張望 月下的楓橋寂然無聲 逝水難追...
    丁_香閱讀 654評論 45 87

友情鏈接更多精彩內容