------培訓 學習型部落格,請多指教-----------
簡單的說物件就是封裝了的資料和方法,類就是模版。
類載入:
當程式啟動時,會載入專案中所有的類和分類,而且載入後會呼叫每個類和分類的+load方法,而且只會呼叫一次。並且類一旦載入到記憶體,就不會被**,直到程式結束的時候才會被**。這個過程就叫做類載入。
當第一次使用某個類建立物件的時候,就會呼叫當前類的+initialize方法,也就是初始化物件,使建立出來的物件可以使用。
物件在記憶體之中是如何儲存的呢?我們這裡的p指標是在函式中宣告的,那麼p就是乙個區域性指標變數,也就是p變數儲存在棧空間中。比如:
int main()
new做了什麼事情?
1.申請空間
:在堆記憶體之中根據類的「模板」申請一塊合適大小的空間建立物件。類「模板」中有哪些屬性,就把這些屬性宣告在這塊空間之中。物件中宣告了類定義的所有的屬性和_isa指標和引用計數器(_isa指標指向**段中的類)。
2.初始化物件
:初始化這塊空間之中物件的屬性的值,就是為屬性賦預設值。
3.返回物件位址
通過指標訪問物件的屬性和方法?
1.訪問屬性:通過指標可以找到指標指向的堆空間中的物件,找到物件後就可以直接訪問物件的屬性。
2.呼叫方法:根據指標找到堆空間中的物件,在根據物件中的_isa指標找到**段中的類中的方法。
null是c中指標變數的值,代表這個指標不指向任何變數,這個時候null等價於0。
int *p = null;//等價於int *p = 0;
nil是oc中指標變數的值,代表這個指標不指向任何物件,這個時候nil等價於0。
person *p = nil;//等價於person *p = 0;
注意:
1.其實null和nil都是乙個巨集,並且巨集值都是0。只不過null是在c語言中宣告的巨集,nil是在oc中宣告的巨集。所以在使用的時候應該區分開來使用。在oc中盡量使用nil,c中只能使用null。
2.如果乙個類指標沒有指向任何物件,通過這個指標去訪問物件的屬性的時候會報錯。通過這個指標去呼叫方法的時候不會報錯,但是不會有任何回應。
1.#pragma mark 分組名
在導航欄顯示分組名
2.#pragma mark -
在導航欄顯示一條水平線
3.#pragma mark - 分組名
在導航欄顯示分組名,分組名上面加一條水平線
函式指的是c語言中的函式,方法指的是定義在oc類中的方法。
不同點:
1.函式除了不能定義在@inte***ce之中,可以定義在原始檔中其他的任意地方(建議不要寫在類中)。方法的宣告只能寫在@inte***ce中,方法的實現只能寫在@implementation中(語法強制要求)。
2.函式可以直接呼叫(函式是孤立的)。而方法只能建立物件,通過物件名來呼叫(方法歸屬於類或者物件)。
相同點:
1.無論是函式還是方法,他們都是封裝了乙個**塊,代表乙個單獨的功能。
如果我們開發乙個程式,不可能將所有的類都寫在同乙個原始檔,後期維護和團隊開發都非常不方便。所以我們需要分模組開發,並且每個模組包含兩個檔案,分別是類的宣告檔案和實現檔案。類的宣告寫在.h檔案,類的實現寫在.m檔案(類的實現裡也要引入類的宣告檔案),使用這個類之前用#import引入.h檔案就行了。
新建檔案的時候選擇cocoa class,檔名使用類名,就會同時建立類的宣告檔案和類的實現檔案。然後我們在.h檔案中寫類的宣告,在.m檔案中寫類的實現。例如:
person.h檔案
#import
@inte***ce person : nsobject
- (void)sayhi;
@end
person.m檔案
#import "person.h"
@implementation person
- (void)sayhi
@end
main.m檔案
#import
#import "person.h"
int main(int argc, const char * argv)
return 0; }
物件作為方法的引數
物件可以作為方法的引數,因為類的本質就是乙個資料型別。並且傳遞的時候是位址傳遞,相當於在方法中操作的引數和實參是同乙個物件。
gender.h檔案
//單獨在乙個標頭檔案中定義乙個性別列舉
typedef enumgender;
person.h檔案
#import
#import "gender.h"
@inte***ce person : nsobject
//人的打招呼方法宣告
- (void)sayhi;
@end
person.m檔案
#import "person.h"
@implementation person
//人的打招呼方法實現
- (void)sayhi
@end
god.h檔案
#import
#import "person.h"
@inte***ce god : nsobject
//上帝的打招呼方法宣告
- (void)sayhi;
//上帝殺死乙個人的方法宣告
- (void)killwithperson:(person *)person;
@end
god.m檔案
#import "god.h"
@implementation god
//上帝的打招呼方法實現
- (void)sayhi
//上帝殺死乙個人的方法實現
- (void)killwithperson:(person *)person
@end
main.m檔案
#import
#import "person.h"
#import "god.h"
int main(int argc, const char * argv)
return 0; }
物件作為方法的返回值
gender.h檔案
//單獨在乙個標頭檔案中定義乙個性別列舉
typedef enumgender;
person.h檔案
#import
#import "gender.h"
@inte***ce person : nsobject
//人的打招呼方法宣告
- (void)sayhi;
@end
person.m檔案
#import "person.h"
@implementation person
//人的打招呼方法實現
- (void)sayhi
@end
god.h檔案
#import
#import "person.h"
@inte***ce god : nsobject
//上帝的打招呼方法宣告
- (void)sayhi;
//上帝殺死乙個人的方法宣告
- (void)killwithperson:(person *)person;
//上帝造人的方法
- (person *)makepersonwithname:(nsstring *)name;
@end
god.m檔案
#import "god.h"
@implementation god
//上帝的打招呼方法實現
- (void)sayhi
//上帝殺死乙個人的方法實現
- (void)killwithperson:(person *)person
//上帝造人的方法
- (person *)makepersonwithname:(nsstring *)name
@end
main.m檔案
#import
#import "person.h"
#import "god.h"
int main(int argc, const char * argv)
return 0; }
物件可以作為類的例項變數,比如我們有乙個人類和乙個狗類,每乙個人擁有乙隻狗,那狗也是人的屬性了。比如:
dog.h檔案
#import
@inte***ce dog : nsobject
@property (nonatomic,copy) nsstring *name;//狗名
- (void)shout;//狗叫的方法宣告
@end
dog.m檔案
#import "dog.h"
@implementation dog
//狗叫的方法實現
- (void)shout
@end
person.h檔案
#import
#import "dog.h"
@inte***ce person : nsobject
@property (nonatomic,retain) dog *dog;//人的狗
@end
person.m檔案
#import "person.h"
@implementation person
@end
main.m檔案
#import
#import "person.h"
int main(int argc, const char * argv)
return 0; }
-------培訓 學習型部落格,請多指教-------------------------
黑馬程式設計師 OC 類和物件
類名 car 屬性 輪胎個數 時速 行為 跑 因為使用了nsobject import 完整地寫乙個函式 函式的宣告和實現 完整的寫乙個類 類的宣告和實現 類的宣告 宣告物件的屬性 行為 nsobject 的目的是 讓car這個類具備建立物件的能力 inte ce car nsobject 用來宣告...
黑馬程式設計師 OC 類和物件
一.物件導向和面向過程的思想 對比 oc是物件導向的,c是面向過程的。物件導向和面向過程只是解決問題的兩種不同思想 1 以用電腦聽歌為例子 a 面向過程 開啟電腦 關閉電腦 b 物件導向 不是相親的 物件 電腦 開機 關機 區別分析 面向過程關注的是解決問題需要哪些步驟 物件導向關注的是解決問題需要...
黑馬程式設計師 OC基本語法
oc是c系列語言,是物件導向的語言,而c語言是面向過程的,那麼首先要理解物件導向和面向過程的區別。面向過程是專注 事件 本身,這件事從發生到結束的行為。例如怎麼把大象裝進冰箱,面向過程的思想是這樣的,首先開啟冰箱門,把大象裝進去,然後把冰箱門關上。而物件導向是專注於 事物 本身的,同樣是裝大象,物件...