1.強指針:默認的狀況下全部的指針都是強指針,關鍵字__strongjava
弱指針:__week關鍵字修飾的指針ui
2.ARC:編譯器將自動在代碼合適的地方插入retain、release、autoreleasespa
ARC的判斷準則,只要沒有強指針指向對象,對象就會被釋放代理
3.判斷是不是ARC指針
查看項目信息;不能使用retain、release、autorelease、retainCount,在dealloc方法中不能使用[super dealloc]code
正常建立對象,不用手動釋放對象對象
4.ARC下循環引入的問題,解決辦法一端使用強指針一端使用弱指針blog
5.@property參數繼承
strong強指針內存
week弱指針
6.__week Person *p=[[Person alloc]init];//不合理,對象一建立出來就被釋放掉,對象釋放掉後,ARC把指針設置爲nil
7.分類的使用,擴展原來類的方法
#import "Student.h"
@interface Student (study) -(void)run; @end
#import "Student+study.h"
@implementation Student (study) -(void)run{ NSLog(@"study run"); } @end
分類裏的方法跟原來的方法同樣使用,若是分類中和類中方法名同樣,優先調用分類的方法
8.非正式協議
所謂的非正式協議就是類別,即凡是NSObject或者其子類的類別,都是非正式協議
9.擴展-特殊的分類
分類名爲空,能夠增長類的實例變量和方法,可是方法須在類自己的.m文件中實現
變量和方法至關於私有
10.block的定義
int (^myblock)(int,int)=^(int a,int b ){ };
調用方式:
myblock(1,2);
能夠再給myblock賦值
22.typedef bolck
typedef int (^Myblock)(int,int)=^(int a,int b ){ };
Myblock myblock1,myblock2;
23.block內能夠訪問外部的變量
當定義block的時候,block會把外部變量的值以const的方式複製一份,放到block所在的內存中,不能修改
全局變量能夠修改
外部變量加__block那麼block內部再也不以const的方式拷貝,能夠在block內部修改,再後面的代碼中,所有使用的是堆區空間
24.block的應用場景,把代碼塊做爲參數傳遞
或者block做爲返回值
25.助記符 inlineBlock
26.protocol相似java的藉口,但協議中的方法不是所有必須實現
步驟:
定義協議
@protocol 協議名稱<NSObject>
@end
採納協議
@interface Person:NSObject <協議1,協議2>
@end
實現協議的方法
當遵照了某個協議後,就有了這個協議中全部方法的聲明
協議還能夠遵照其餘的協議
OC不能繼承多個類,可是可以遵照多個協議
27.protocol方法的修飾符
必須實現@required
選擇實現@optional
28.id類型後面加<協議名>表示只能賦值遵照了協議的對象
類名後面加<協議名>表示只能賦值遵照了協議的當前類的對象
29.協議代理模式
傳入的對象,代替當前類完成了某個功能,稱爲代理模式
30.@protocol
在.h文件中用@protocol 協議名 代替import導入協議
在.m文件中導入協議
在main文件中再使用時導入協議