ios黑馬程式設計師 ARC

2021-06-26 08:39:04 字數 2847 閱讀 2051

強指標:預設情況下所有的指標都

是強指標型(strong) 在arc當中

,乙個物件只要沒有強指標引用,

那麼它就會被系統**

弱指標:弱指標不影響物件的**

在arc當中,所有的跟手動管理記憶體

相關的方法都不能呼叫比如說

dealloc不能重寫父類 了(不能

super dealloc)

//__weak定義乙個弱指標

__weak person * p2 = p//弱指標

不影響物件

//強指標引用使用oc物件型別,

@property (nonatomic,strong)

我們用別人的專案有可能用的是非

arc的專案

-fno-objc-arc

-f-objc-arc

第三方框架:就是別人寫的專案,

我們要用,如果他是非arc機制,給

編譯器加乙個引數-fno-objc-arc就

是告訴編譯器這個檔案就是非arc機

制的,這樣就不會報錯了,並且非

arc手動記憶體管理的方法都能夠正常

呼叫 了,在非arc專案中引入 arc機

制的檔案,給編譯器加乙個引數 -

f-bojc-arc,就是告訴編譯器這個文

件是arc機制的

edit->refactor-convert to 

arc迴圈引用問題

arc機制中如果出現了迴圈引用問題

, 只需要把其中引用一方變成,

weak弱指標既可解決問題

block型別

int bool char float double 

nsobject * id sel

他們的共同特點就是能夠定義成變

量1.int a = 0;

bool b = yes;

2.當做函式,和方法的引數的傳遞

(void) test(int) a

block:是oc中比較特殊的資料型別

,它用來封裝一段**,並且可以

把這段**當做引數傳遞

1.通過{}來封裝**

1.void test():返回值為空,並且沒

有引數{}

^{};

2.int test();有返回值,還有乙個引數^

3.int test(int a);有返回值,還有一

個引數^(int a)

4.int test(int a,int b)有返回值,有

多個引數

1.定義乙個返回值為空,並且沒有

引數的block變數

void (^myblock)() = ^{};

2.定義乙個有返回值的,並且沒有

引數的block變數

int (^myblock)() = ^;

3.定義乙個有返回值,並且有乙個

引數的block變數

int (^myblock)(int a) = ^(int 

a);4.定義乙個有返回值,並且有多個

引數的block變數

int (^myblock) (int a,int b) = 

^(int a,int b)

block好處就是,我定義block的人

本身可以不關心

//block內部演算法的實現

//誰呼叫有block引數的方法,誰就

給我實現block內部演算法

協議協議就是用來宣告方法

@protocol myprotocol

- (void)test;

@end

在.m中實現協議中的方法

@required表示以下方法必須實現

- (void) test1;

@optional 表示可選實現

- (void)test2;

可選的就不會在遵守協議的那個類

裡面顯示

但是,required就會提示你必須實

現協議本身他可以遵循其他的協議

協議可以遵循多個

基協議協議就是用來宣告方法的

@protocol myprotocol 

內部宣告方法

@end

協議內方法的約束

@required必須實現的方法

@optional 選擇實現

預設的方法就是 必須實現的

讓某個類遵循協議只需要在類繼承

後面 《協議名字》

類可以遵循多個協議《協議名,協議

名,協議名》

協議本身也可以遵循其他協議《協議

名字》協議當中不可以宣告成員變數

子類繼承了父類,同樣也會繼承父

類遵循的協議

nsobject * obj = [[nsobject]

init];

id obj2= [[nsobject alloc] init];

//定義oc物件變數時,可以給他加

乙個協議約束

person*p  = 

[[person alloc] init];

@property (nonatomic,strong)

car* car;

//如果你要限定某個物件,一定要實

現某個協議,那麼我們一般用

idobj 去定義

@property (nonatomic,strong)id 

obj;

//與@class功能一樣,就是告訴類

,myprotocol是乙個協議

@protocol myprotocol;

把協議宣告到 乙個類的.h檔案中,

其他類繼承之外,沒辦法去遵循這

個協議了

單獨把協議定義成乙個.h,任意類

都可以遵循這個協議,

黑馬程式設計師 ARC與autorelease

一 property 引數設定 非 arc機制下 1 set方法記憶體管理相關引數 assign 直接複製,一般用於非 oc型別的資料,預設為 assign retain release 舊值,retain新值 copy release 舊值,copy新值 2 是否生產set方法 readonly ...

黑馬程式設計師

asp.net android ios開發 net培訓 期待與您交流!map hashtable 底層是雜湊表資料結構,不可以存入null鍵和null值。該執行緒是同步的,jdk1.0出現,效率低。hashmap 底層是雜湊表資料結構,允許使用null鍵和null值。該集合執行緒是不同步的,將has...

黑馬程式設計師

1.了解反射 反射 就是通過class檔案物件,去使用該檔案中的成員變數,構造方法,成員方法。person p new person p.使用 要想這樣使用,首先你必須得到class檔案物件,其實也就是得到class類的物件。2.反射中的類 class類 成員變數 field類 構造方法 const...