Objective-c學習筆記(三)oc 多輸入參數的方法及協議的使用及變量

概述:OC多輸入參數的方法、@protocol的使用、OC中變量、變量的存儲類別


1.多輸入參數的方法

同單參數和無參數的方法相比,只是需要注意要對新參數建議添加可以識別的標籤。

舉例:

 //聲明

-(void) setIntX: (int) n;  // 一個參數

-(void) setIntX: (int) n andSetIntY:(int) d;

 //調用

 //在調用多參數方法時,可以省略從第二個開始的方法名字

 [test setIntX:1 :2];   //省略了第二個標籤,但建議書寫時還是帶上所有的標籤,易於程序的可讀


2.@protocol 的使用

協議的作用類似於c++中對抽象基類的多重繼承。協議是多個類共享方法的列表,協議中列出的方法在本  類中沒有相應的實現,而是由別的類來實現這些方法,如果一個類要遵守一個協議,該類就必須實現特  定協議的所有方法(可選方法除外)

2.1協議是一系列方法的列表,任何類都可以聲明自身實現了某一個或一些協議。

在Objective-C 2.0之前,一個類必須實現(它聲明自己要符合的)協議中的所有方法,否則編譯器會  報告一個錯誤,表明這個類沒有實現協議中所有方法;2.0之後允許標記協議中某些方法是可選的,  這樣編譯器就不會強制實現這些可選的方法。


2.2通過在@interface中的一對尖括號內列出協議的名稱,告訴編譯器你正在遵守的一個協議,eg:

@interface Test: NSObject <NSCopying>

例子中,Test類的父類是NSObject,並且遵守了<NSCopying>協議,則在實現Test類時,必須實現NSCopying協議中必須要實現的方法


2.3也可以遵守多項協議,只需要在尖括號中列出多個協議,格式如下:

@interface Test:NSObject <NSCopying,NSCoding>

這樣編譯器就知道Test類遵守多項協議,Test類中必須實現所有協議中定義的方法


2.4也可以自己定義協議,格式如下:

@protocol Fly

 -(void) go;

 -(void) stop;

@optional   //optional 標記的方法是可選的方法

-(void) sleep;

@end

2.5 協議也可以採用類似繼承的思想

@protocol Fly1<Fly>   //因此任何遵守Fly1協議的類必須實現此協議列出的方法和由Fly協議定義的方法



3.OC中變量


3.1局部變量:同其他語言一樣,在方法內部定義的變量,作用域只在對應的方法內

3.2全局變量:全局變量是定義在方法外部定義的變量。它不屬於哪一個方法,而屬於一個源程序文件,其作用域在整個源程序,全局變量的說明符爲extern  e.g.

extern int intX;

3.3靜態變量

以前在理解靜態變量時又些偏頗,現在好好梳理下這塊。

首先靜態變量就是由static 修飾的變量,靜態變量有以下優點,它可以節省內存,因爲它是所有對象所共有的,因此,對多個對象來說,靜態變量只存儲在一處,供所有對象共用。引出靜態變量是因爲對於方法內部定義的變量即局部變量,在內存的棧上分配的空間,它的作用域只是在該方法內,當方法結束時,棧空間被釋放,如果想要在下次調用該方法時獲取上次調用的值怎麼辦呢?又不破壞類的封裝性,這就引入了靜態變量的概念。


4.變量的存儲類別

前面提到兩個,extern 和 static

還有auto、const、volatile,重點說一下auto和volatile

auto用於聲明一個自動局部變量,是方法內部變量的聲明方式,缺省設置。ps:就是局部變量嘛,沒啥用貌似

volatile 的作用剛好同const相反,它明確地告訴編譯器,該變量的值會發生改變,它用來修飾被不同線程訪問和修改的變量。使用volatile修飾的變量是隨時可以放生改變的

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章