對象的簡單記憶體分析,對象簡單記憶體分析
在如今學習的過程中,我們更多的是在練習如何使用各種方法或某種套路,例如需要設計某個app的時候,我們可能會說我們之前設計過的模型中直接套過來使用,或者在網上需找類似的demo,隨著時間和經驗的積累,我們在這一方面越來越得心應手,以後一直是copy、copy等,但對一些簡單的本質東西不甚瞭解了,雖然這些東西也可以不必去知道,但我認為多瞭解一些基本的東西還是有好處的,下面就來簡單的說一些對象的記憶體的問題:1.我們先來建立一個Person類:
#import <Foundation/Foundation.h>@interface DCPerson : NSObject{ int age; NSString *name;}-(void)eat;-(void)walk;@end
代碼很簡單,就沒有寫注釋了。首先是建立一個DCPerson類,這個類有兩個屬性,age和name。同時有兩個方法,分別是-(void)eat和
-(void)walk。
當我們在程式中建立一個類的時候,在記憶體中會給類分配記憶體,首先類肯定是有地址的,其次類中會有對應的方法。
當我們使用類建立對象的時候,會相應的給對象分配儲存空間。例如我們建立兩個對象person1和person2。
- (void)viewDidLoad { [super viewDidLoad]; //建立person1對象 DCPerson *person1=[[DCPerson alloc] init]; [person1 age]; [person1 walk]; self.person1=person1; //建立person2對象 DCPerson *person2=[[DCPerson alloc] init]; [person2 age]; [person2 walk]; self.person2=person2;}
這樣,記憶體中就會多出兩塊地區,用來存放person1對象和person2對象。
下面先,結合圖片來分析大概的情況。
當我們使用類建立一個對象的時候,每個對象就會有一個isa指標,當我們給對象發送訊息的時候,對象會通過自身的isa指標去類中找對應的方法,從來來實現方法。屬性是每個對象特有的,而方法是所有對象共有的,只有一份。類在記憶體中只會被載入一次。
以上是一些自己對對象記憶體的簡單分析,只是做了一些很簡單的分析,有不對的地方還望大神指正,謝謝!
著作權聲明:本文為博主原創文章,未經博主允許不得轉載。