Objective-c之NSCopying

copy的原理:

 执行<NSCopying>协议,类中必须实现copyWithZone:方法响应的copy消息。 

 copy消息将发送copyWithZone:这个消息给你的类,它的参数是nil

 copyWithZone:返回一个不可改变的copy

 

*MyPoint.h*/
#import <Foundation/Foundation.h>


@interface MyPoint : NSObject<NSCopying>//继承超类
{
    int x;
    int y;
};
//set方法
-(void) setMyPoint:(int)x andY:(int)y;
//get方法
-(int) getX;
-(int) getY;

@end


 

/*MyPoint.m*/
#import "MyPoint.h"

@implementation MyPoint
-(void) setMyPoint:(int)_x andY:(int)_y
{
    //要对传进来的x和y进行判断
    if(_x<0)
    {
        x = 1;
    }
    if(_y<0)
    {
        y = 1;
    }
    x = _x;
    y = _y;
}
-(int) getX
{
    return x;
}
-(int) getY
{
    return y;
}
//copy
/*
    zone参数处理不同的你alloc出来的内存区域,如果你写的应用程序alloc了大量的内存,并且你又想优化你的内存区域。
    你可以给copywithzone传值,调用allocwithzone来alloc内存:这个方法可以在指定的区域alloc内存
 */
-(id) copyWithZone:(NSZone *)zone //创建一个复制的接收器,储存zone 
{
    MyPoint *newPoint = [[MyPoint allocWithZone:zone]init];
    [newPoint setMyPoint:x andY:y];
    return newPoint;
}
/*
	NSZone 是苹果系统对内存分配和释放的优化方式。
	NSZone不是一个对象;它是一个C结构,用于纪录关于内存处理(管理)一系列对象的信息
	在这里它处理了zone这个传进来的对象的信息 
*/
@end


 

#import <Foundation/Foundation.h>
#import "MyPoint.h"
int main (int argc, const char * argv[])
{
    MyPoint *point1 = [[MyPoint alloc]init];//创建myPoint对象,alloc是分配内存空间,init是初始化
    [point1 setMyPoint:2 andY:3];//调用对象point1的方法
    NSLog(@"x = %i",[point1 getX]);//[point1 getX]调用get方法
    NSLog(@"y = %i",[point1 getY]);
    
    MyPoint *point2 = [point1 copy];//实现复制构造
    [point2 setMyPoint:5 andY:5];
    NSLog(@"x = %i",[point2 getX]);
    NSLog(@"y = %i",[point2 getY]);
    
    [point1 release];// release 是释放分配的内存空间
    [point2 release];
    return 0;
}


 

你可能感兴趣的:(c,优化,interface)