一、概念
二、代碼
#import <Foundation/Foundation.h>
#pragma mark 類
/*
要求定義一個人類
事物的名稱 : 人(Person)
屬性 : 年齡(age),身高(height),體重(weight)
行為 : 吃飯(eat),睡覺(sleep),散步(walk)
*/
@interface Person : NSObject
{
@public
// 屬性
int _age;
double _height;
double _weight;
}
// 行為
- (void)eat:(char *)food;
- (void)sleep;
- (void)walk;
+ (void)demo;
@end
@implementation Person
- (void)eat:(char *)food
{
NSLog(@"吃%s",food);
}
- (void)sleep
{
NSLog(@"開始睡覺");
}
- (void)walk
{
NSLog(@"開始散步");
}
+ (void)demo
{
NSLog(@"demo");
}
@end
#pragma mark main函數
int main(int argc, const char * argv[])
{
// 1.通過類創建對象
/*
1.開辟存儲空間, 通過new方法創建對象 會在 堆 內存中開辟一塊存儲空間
2.初始化所有屬性
3.返回指針地址
創建對象的時候 返回的地址 其實就是類的第0個屬性的地址
但是 需要注意的是 : 類的第0個屬性 并不是我們編寫的 _age, 而是一個叫做isa的屬性
isa 是一個指針, 占8個字節
其實類也是一個對象, 也就意味著 Person 也是一個對象
平時 我們所說的創建對象 其實就是通過一個 類對象 來創建一個 新的對象
類對象 是系統自動幫我們創建的,里面保存了當前 對象的所有方法
而,實例對象是程序員 手動通過new來創建的,而實例對象 有一個isa指針 就指向了 創建它的那個類對象
*/
Person *p = [Person new];
p->_age = 25;
p->_height = 1.71;
p->_weight = 65;
NSLog(@"p = %p",p);
NSLog(@"&age = %p",&(p->_age));
/*
p = 0x100102660
&age = 0x100102668
*/
NSLog(@"age = %i, height = %f,weight = %f",p->_age,p->_height,p->_weight);
[p walk];
[Person demo];
/*
struct Person
{
int age;
char *name;
};
struct Person sp;
NSLog(@"&sp = %p",&sp);
NSLog(@"&age = %p",&sp.age);
*/
// 每次 new 都會 創建一個新的對象, 分配一塊新的存儲空間
// 如果 修改A的屬性 不會影響到 B的屬性
// 一個類 可以創建多個對象
Person *p2 = [Person new];
p2->_age = 33;
p2->_height = 1.73;
p2->_weight = 68;
return 0;
}
image.png