ios黑馬程式員--ARC

來源:互聯網
上載者:User

標籤:property   編譯器   super   arc   

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


是強指標型(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();有傳回值,還有一個參


^{return 10;}

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


個參數

^(int a){return a + 1}

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


多個參數


1.定義一個傳回值為空白,並且沒有


參數的block變數

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

2.定義一個有傳回值的,並且沒有


參數的block變數

int (^myblock)() = ^{return 


10;};

3.定義一個有傳回值,並且有一個


參數的block變數

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


a){return a + 1};

4.定義一個有傳回值,並且有多個


參數的block變數

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


^(int a,int b){return a + b}

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


本身可以不關心

//block內部演算法的實現

//誰調用有block參數的方法,誰就


給我實現block內部演算法

協議

協議就是用來聲明方法

@protocol Myprotocol


- (void)test;


@end

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

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

- (void) test1;

@optional 表示可選實現

- (void)test2;

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


裡面顯示

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


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

協議可以遵循多個

基協議

協議就是用來聲明方法的

@protocol Myprotocol 


<NSObject>

內部聲明方法

@end

協議內方法的約束

@required必須實現的方法

@optional 選擇實現

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

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


後面 <協議名字>

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


名,協議名>

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


名字>

協議當中不可以聲明成員變數

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


類遵循的協議

NSObject * obj = [[NSObject]


init];

id obj2= [[NSObject alloc] init];

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


一個協議約束

Person<Myprotocol> *p  = 


[[Person alloc] init];

@property (nonatomic,strong)


Car<Myprotocol2> * car;

//如果你要限定某個對象,一定要實


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


id<Myprotocol2>obj 去定義

@property (nonatomic,strong)id 


<Myprotocol2> obj;

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


,MyProtocol是一個協議

@protocol MyProtocol;


把協議聲明到 一個類的.h檔案中,


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


個協議了

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


都可以遵循這個協議,





























本文出自 “言十年” 部落格,請務必保留此出處http://yanshinian.blog.51cto.com/8275527/1564567

ios黑馬程式員--ARC

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.