ios视频学习3.2 类的声明和对象的创建—内存分析1

xcode的使用一点技巧:

普通word,tab或者shift+tab缩进

xcode中,command键(类似alt)+{}大括号实现缩进。


多态的概念:用父类声明一个对象,实际上是引用子类的初始化、变量、方法,可以引用多个子类的变量、方法,车=new 汽车,车=new 火车,车.加油()

实例变量在声明中不能赋值,但系统默认给赋值0

比如:

@interface Book
{
    int pageNum;//在内存数据段,初始值为0
<pre name="code" class="objc">}

 
    int getPageNum();
@end

Book *b1,*b2;
b1=[ [Book alloc] init ];
<pre name="code" class="objc">b2=[ [Book alloc] init ];

 
b1和b2拥有不用的实例变量pageNum,存在堆中,但共享类的方法getPageNum,方法存放在代码段。
查找b1指针指向的内存地址:
NSLog("b1指向的内存地址为:%p",b1);//堆中的内存地址
NSLog("b1指针变量在栈中的临时地址是:%p",&b1);//声明b1指针变量在<span style="font-family: Arial, Helvetica, sans-serif;">栈中的临时地址</span>


比如:

NSString *s;//未初始化

指针s存储空间为4个字节0x00099332,这个指针指向的内存为空nil

s=[ [NSString alloc] initWithString : @"HelloIphone" ];

存储位置大小
s指针in栈里4个字节
s指针---->堆内容为:"helloIphone"  
12个字节

alloc实际分配了一定(估计是4K)的空间,initWithString 将“数值”填充到这个空间。


任何类在初始化时先调用自己的init,从父类继承的init方法,可以自己重载。

举例:

右键main.m=》new file=》OS X(application)=》Objective-C Class=》Person=》Person.h  Person.m


Person.h

@interface Person:NSObject

{

int age;//年龄

}

-(id)initWithString:(int)_age//初始化

-(int)getAge;

-(void)setAge:(int)_age;

@end


Person.m

@implementation Person

-(id)initWithString:(int)_age

{

if(self=[super init])

{

age=21;

NSlog("初始化age=21");

}

return self;

}

-(int)getAge

{

return age;

}

-(void)setAge:(int)_age

{

age=_age;

}

@end


main.m

Person *p=[ [Person alloc]initWithString:100];

堆里p.age=21 栈里存放的是指针的地址:0x003232883

int age=28;//也存放在栈里

[p setAge:age];//对象P的age属性改为:28

堆里p.age=28 栈里存放的是指针的地址不变

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值