您的位置:首页 > 其它

OC类的使用,属性声明与复合类的实现示例

2016-03-18 16:18 274 查看
OC类的使用,属性声明与复合类的实现示例

/*********XYPoint.h***********/

#import <Foundation/Foundation.h>

@interface XYPoint : NSObject{

int x;

int y;

}

@property(nonatomic,assign)int x;

@property(nonatomic,assign)int y;

-(id)initWithX: (int)_x andY: (int)_y;

-(NSString*)description;

@end

/*********XYPoint.m**********/

#import "XYPoint.h"

@implementation XYPoint

@synthesize x,y;

-(id)initWithX: (int)_x andY: (int)_y

{

if (self = [super init]) {

x = _x;

y = _y;

}

return self;

}

-(NSString*)description

{

return [NSString stringWithFormat: @"(%d,%d)",x,y];

}

@end

/*********Circle.h*********/

#import <Foundation/Foundation.h>

#import "XYPoint.h"

//复合类: 一个类的成员变量为另外一个类的对象

@interface Circle : NSObject{

int radius;

XYPoint* origin;//圆心

}

//赋值方式:assign retain copy 其中assign适用于简单类型的数据

@property(nonatomic,assign)int radius;

@property(nonatomic,retain)XYPoint* origin;

-(id)initWithRadius: (int)_r andOrigin: (XYPoint*)_p;

-(NSString*)description;

-(void)dealloc;//类似于C++中的析构函数

@end

/**********Circle.m************/

#import "Circle.h"

@implementation Circle

@synthesize radius,origin;

//将对Circle类的相关总结放入帖子中

-(id)initWithRadius: (int)_r andOrigin: (XYPoint*)_p

{//基类部分成员的初始化[super init];

if (self = [super init]) {

//本类特有实例变量的初始化

radius = _r;

//origin = _p;

origin = [[XYPoint alloc] initWithX:_p.x andY:_p.y];

}

return self;

}

//重写基类的dealloc方法 如果类中有指向堆空间的实例变量,为了避免出现内存泄漏,则需要重写dealloc方法

//方法重写:在派生类中定义一个与基类原型相同的方法,则派生类中重写了基类的方法。

-(void)dealloc

{

[origin release];

[super dealloc];//回收基类部分成员的资源

}

-(NSString*)description

{

return [NSString stringWithFormat: @"radius:%d,origin:%@",radius,origin];

}

@end

/**********main.m*************/

#import <Foundation/Foundation.h>

#import "XYPoint.h"

#import "Circle.h"

int main(int argc, const char * argv[])

{

@autoreleasepool {

//消息机制:[receiver message];如果receiver是类对象,则与message同名的方法需要为类方法(+)(注:类方法相当于c++中的静态成员函数),如果receiver是实例化对象,则与message同名的方法需要为实例方法(-)。

XYPoint* p = [[XYPoint alloc] initWithX:1 andY:1];//声明并初始化对象

//对象本质就是指针。

//alloc:申请堆空间 如果申请堆空间成功,则返回OC实例化对象(即返回堆空间的首地址)。

p.x = 10;//对象名.属性名做左值,等价于[p setX:10];

NSLog(@"%d",p.x);//对象名.属性名做右值或者读取,等价于[p x];

NSLog(@"%@",p);

Circle* c = [[Circle alloc] initWithRadius:10 andOrigin:p];//思考:初始化c时的内存分析图是怎样的?

NSLog(@"c:%@",c);

[p release];

[c release];

}

return 0;

}

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: