iOS開發 小白高階 iOS中的類

2021-06-28 04:52:08 字數 2816 閱讀 5895

.h檔案

@inte***ce mytest : nsobject

- (void) initname:(nsstring *) newname;

@end
@inte***ce mytest告訴編譯器這是乙個新類「mytest」的介面,而nsobject則表示每個mytest類都是乙個nsobject,並且每個類都將繼承nsobject類的所有行為。

大括號中內容就是這個mytest類中的元素。也就是這個類的資料成員。testname也稱為mytest類的例項變數。接下來-(void) initname:(nsstring *)newname; 這看起來有點像c++中的函式原型,在objective-c中我們稱為方法宣告.  它列出了每個方法的名稱,返回值的型別,跟引數。

- (void) initname:(nsstring *)newname;
「-」 是objective-c 方法的宣告 也有「+」 那麼「-」,「+」是什麼意思,如果學過c++就會知道在c++中有個static方法(靜態方法)。這個「+」號代表的意思就跟c++中靜態方法是一樣的。(void)代表的就是函式的返回值,  initname就代表著這個函式的名字 ,冒號後面就是要傳入的引數。(nsstring*)就代表著你要傳入的引數是乙個字串 。

在objective-c中有一種名為「中綴符」的語法方式。方法的名稱及其引數都是合在一起的。例如:

[mytest  initname:@「xiaobai」];

但是需要注意的是「:」的使用,如果你的方法是不帶引數的那麼不需要冒號,反之需要。很有可能我們在寫程式的時候因為這乙個冒號而絞盡腦汁。

@end 告訴編譯器我們完成了這個類的宣告。

@inte***ce部分是用於定義類的公共介面。通常介面也叫api。

.m檔案

@inte***ce mytest()

@property (strong)nsstring ****;

@end

@implementation mytest

-(void) initname : (nsstring *)newname@inte***ce mytest : nsobject

@propery (nonatomic, copy) nsstring *test;

@end

@implementation mytest

@synthe test;

@end;

-(void) initname : (nsstring *)new***@end

@inte***ce部分我們叫介面,而真正使物件能夠執行的**位於.m檔案中。

@implementation 是乙個編譯器命令表明你將要為這個類提供**。類名出線在@implement之後。

接下來我們要實現.h檔案中的方法,甚至我們可以定義並實現那些@inte***ce中沒有實現過的方法。那麼那些沒有在@inte***ce時給誰用的呢。在c++中有私有方法跟保護方法你可以理解為在@inte***ce中的是公共的而在@imolementation定義的變數跟方法則是私有的。也就是說.h中的變數跟方法任何人都可以使用,而在.m檔案中只能是自己來使用。

下劃線"_"與self

第一種形式

@inte***ce mytest : nsobject

@propery (nonatomic, copy) nsstring *test;

@end

@implementation mytest

@synthesize test = _test;

@end;

第二種形式

@inte***ce mytest : nsobject

@propery (nonatomic, copy) nsstring *test;

@end

關於@synthesize在上篇部落格中已經說了,那麼久在複習一遍順便在加一點這倆天一些新感悟。

在沒有引進arc以前我們需要使用@synthesize  test;系統將不會自動生成例項變數「_test」,直接通過變數名test,也就是直接使用變數名在賦值運算的時候,只是將記憶體區域的指標複製給變數,相當於assgin。如果是通過點語法「self.test=」則是走屬性生成方法,也就是在@property中定義的屬性。如果沒有屬性則預設是assgin。

如果沒有寫@synthesize,系統會自動生成乙個預設的加「_」的成員變數(即使是變數名中已經有乙個「_」);

@synthesize 以前可能都看到過 @syjnthesize test = _test; @synthsize test;  可能也會有像我一樣剛入門沒有接觸過的,那麼我感覺以後我們只需要只需要盡量去使用屬性變數就可以,因為系統會為我們做好一切。

也許大家也可能看見過這樣的**

self.btn1 =[[uibutton alloc] init];

_btn1 = [[uibutton aaloc] init];

那究竟有什麼區別也就是第一條所說的self.btn1 走的是屬性方法,但是走的是什麼屬性方法還是要看自己定義的屬性。而_btn則是直接呼叫變數名為_btn1的指標隊成員變數直接賦值相當於assgin。

對於大括號裡的成員變數我們可以用self->_test來呼叫。(但是我沒見過這麼來用的)。

個人總結

感覺arc跟類成員這倆快聯絡其實挺多的。感覺自己的理解有的想表達可能表達的不是很清楚,也歡迎大街一起討論。本人也是剛接觸ios希望大家能一起學習進步。

iOS小白高階之旅 一

程式設計思想 1.面向過程 以事件為中心,關心的是完成該事件的詳細步驟 2.物件導向 以事件為中心,設計每乙個事物具備的特徵和行為,而完成該事件只是事物所有功能中的乙個小功能.類 具備相同特徵和行為的事物的抽象,是乙個抽象的概念,不具體,相當於乙個模板 物件 類的例項,類的具體表現,世間萬物皆是物件...

iOS開發 小白高階 什麼是ARC 二

property nonatomic,strong nsstring array 在ios程式中我們常常會看到上述的字樣那麼這究竟是什麼意思呢?這也就是我們所說的屬性。屬性 readewrite 指明屬性是read write 預設屬性是readwrite。在沒有arc以前需要 sythesize指...

IOS高階開發 Runtime(三)

11 系統類的方法實現部分替換 void methodexchange 列印結果 仔細看log 2013 07 26 16 33 22.776 highoc 7104 c07 sssaaaass 2013 07 26 16 33 22.778 highoc 7104 c07 sssaaaass 12...