使用copy再次实现Circle类,保证不能有内存泄漏问题

  1 #import <Foundation/Foundation.h>
  2 //xieyi
  3 @protocol showOn
  4 @required 
  5 -(void)printOn;
  6 @end
  7 // lei
  8 @interface MyPoint : NSObject<showOn,NSCopying>{
  9     int x;
 10     int y;
 11 }
 12 @property (nonatomic,assign)int x,y;
 13 -(id)initWithX:(int)_x andY:(int)_y;
 14 @end
 15 // leibie fenlei
 16 @interface MyPoint(MoveSet)
 17 
 18 -(void)moveToX:(int)_x andY:(int)_y;
 19 
 20 
 21 @end
 22 
 23 #import "MyPoint.h"
 24 
 25 @implementation MyPoint
 26 @synthesize x,y;
 27 -(id)initWithX:(int)_x andY:(int)_y{
 28     if(_x==0)
 29         x=1;
 30     if(_y==0)
 31         y=1;
 32     x=_x;
 33     y=_y;
 34     return self;
 35 }
 36 -(id)copyWithZone:(NSZone *)zone{
 37     MyPoint* newPoint=[[MyPoint allocWithZone:zone] initWithX:x andY:y];
 38     return newPoint;
 39 }
 40 -(void)printOn{
 41     NSLog(@" x = %d , y = %d ",x,y);
 42 }
 43 @end
 44 @implementation MyPoint(MoveSet)
 45 -(void)moveToX:(int)_x andY:(int)_y{
 46     x=_x;
 47     y=_y;
 48 }
 49 @end
 50 
 51 #import <Foundation/Foundation.h>
 52 #import "MyPoint.h"
 53 
 54 @interface Circle : NSObject<showOn>{
 55     MyPoint* point;
 56     int radius;
 57 }
 58 @property (nonatomic,copy)MyPoint* point;
 59 @property (nonatomic,assign)int radius;
 60 -(id)initWithPoint:(MyPoint* )_p andRadius:(int)_r;
 61 -(id)initWithPoint:(MyPoint *)_p;
 62 
 63 @end
 64 
 65 
 66 #import "Circle.h"
 67 
 68 @implementation Circle
 69 @synthesize point;
 70 @synthesize radius;
 71 
 72 -(id)initWithPoint:(MyPoint *)_p andRadius:(int)_r{
 73     if(_r==0)
 74     {
 75         radius=1;
 76     }
 77     if(_p==nil)
 78         return nil;
 79     if(self=[super init])
 80     {
 81         if(point!=_p)
 82         {
 83             if(point)
 84                 [point release];
 85             point =[[MyPoint alloc]initWithX:_p.x andY:_p.y];
 86         }
 87         
 88     }
 89         radius=_r;
 90         return self;
 91 }
 92 
 93  
 94 -(id)initWithPoint:(MyPoint*)_p{
 95     self=[self initWithPoint:_p andRadius:10];
 96     return self;
 97 }
 98 
 99 -(void)printOn{
100     NSLog(@"point(x,y) = (%d,%d),radius = %d",point.x,point.y,radius);     
101 }
102 
103 -(void) dealloc{
104     [point release];
105     [super dealloc];
106 }
107 
108 @end

 

posted @ 2013-08-21 16:31  shouqiang Wei  阅读(226)  评论(0编辑  收藏  举报