標籤:
------ android培訓、java培訓、期待與您交流! ----------
1.強指標:預設的情況下所有的指標都是強指標,關鍵字__strong
弱指標:__week關鍵字修飾的指標
2.ARC:編譯器將自動在代碼合適的地方插入retain、release、autorelease
ARC的判斷準則,只要沒有強指標指向對象,對象就會被釋放
3.判斷是否是ARC
查看項目資訊;不能使用retain、release、autorelease、retainCount,在dealloc方法中不能使用[super dealloc]
正常建立對象,不用手動釋放對象
4.ARC下迴圈引入的問題,解決辦法一端使用強指標一端使用弱指標
[email protected]參數
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.協議代理模式
傳入的對象,代替當前類完成了某個功能,稱為代理模式
[email protected]
在.h檔案中用@protocol 協議名 代替import匯入協議
在.m檔案中匯入協議
在main檔案中再使用時匯入協議
黑馬程式員-------Objective-C基礎4