OC 类的存储细节

来源:互联网 发布:java飞机大战复杂子弹 编辑:程序博客网 时间:2024/04/29 08:06

说明:
这里写图片描述
这里写图片描述

示例代码:

#import <Foundation/Foundation.h>@interface Person:NSObject{    @public    NSString *name;    int _age;    float _weight;}-(void)walk:(int)num;@end@implementation Person//每走一百步,体重减少0.2-(void)run:(int)num{    _weight-=100/num * 0.2f;    NSLog(@"%@ has walk %d, your weight is %f",name, num, _weight);}@endint main(int argc, const char * argv[]){    @autoreleasepool {        //        Person *person = [Person new];        person->name = @"tom";        person->_age = 22;        person->_weight = 120.0f;            [person walk:50];          }    return 0;}

解析:
创建类Person
Person p=[Person new];
Person p1=[Person new];
此时:
1)申请了内存空间,
———-》申请的空间在内存的“堆区“
2)给事例变量初始化
———-》p(指针变量) 存放在“栈区“
3)返回了空间的首地址
———-》对象代码保存在“内存代码区”

4)[p run]方法运行的原理:
p从内存栈区指向堆区的_isa指针地址,_isa又找到内存代码区,指向run方法

事例图
总结:不同的对象在内存里的地址是不相同的
这里写图片描述

0 0
原创粉丝点击