pragma mark 对象的内存存储细节
pragma mark 概念
pragma mark 代码
#import <Foundation/Foundation.h>
/**
要求定义一个人类
事物的名称: 人
属性: 年龄(age)、身高(height)、体重(weight)
行为: 吃饭(eat)、睡觉(sleep)、散步(walk)
Xcode Debug
*/
@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
int main(int argc, const char * argv[])
{
#warning 要求定义一个人类
// 1.通过类创建对象
/*
1. 开辟存储空间
2. 初始化所有属性
3. 返回指针地址
创建对象的时候 返回的地址 其实就是类的 第0个属性的地址
但是 需要注意的是 : 类的第0个属性 并不是我们编写的_age, 而是一个叫做 isa的属性
isa 是一个指针, 占8个字节 (指向 当前对象(p) 所属的类(Person) ) `` Person *p = [Person new];
其实类 也是一个对象, 也就意味着Person 也是一个对象
平时我们所说的 创建对象 其实就是通过 类对象 来创建一个 新的对象(实例对象)
类对象是系统自动 帮我们创建的, 里面保存了当前对象的所有方法
而实例对象 是程序员 手动通过new来创建的, 而实例对象 中有一个isa指针 就指向了创建它的那个类对象
*/
Person *p = [Person new];
p->_age = 24;
p->_height = 170;
p->_weight = 80;
NSLog(@"age = %i, height = %f, weight = %f",p->_age,p->_height,p->_weight);
[p walk]; // 走了3步 1、先从栈找到 实例对象地址 2、通过栈的对象地址,在实例对象找到 isa指针 3、通过isa指针 知道类对象的方法 walk
[Person demo]; // 只走了1步 1、直接到类对象里面查找
// NSLog(@"p = %p",p);// 0x100600110
// NSLog(@"&age = %p",&(p->_age));//0x100600118
Person *p2 = [Person new];
p->_age = 30;
p->_height = 177;
p->_weight = 100;
#warning test
/*
struct Person
{
int age;
char *name;
};
struct Person sp;
NSLog(@"&sp = %p",&sp);
NSLog(@"&age = %p",&sp.age);
*/
return 0;
}