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 栈里存放的是指针的地址不变