objective-C五个基本类函数

一、initWith带参的初始化

类型是(id),因为要返回self

- (id)initWith:(float)valueR 

    andPoint:(CenterPoint*)valueP

{

       //第一步,判断参数的有效性。如果参数无效,先self release,然后返回nil。

    if(nil==valueP||valueR<=0)

       {

              [self release];

              return nil;

       }

       

//第二步,调用父类的init初始化函数。如果父类没有init成功那么直接返回nil

 这一步不需要self release,因为如果父类init不成功,父类就会释放自己

       self=[super init];

       if(nil==self)

       {

              return nil;       

       }

       

       //第三步,成员变量申请空间并赋值。

    _origin = [[CenterPoint alloc]init];

       if(nil == _origin)

       {

              [self release];

              return nil;

 

       }

//注意这里要使用set函数赋值,因为成员变量是对象的指针

       [_origin setAll:valueP._x andY:valueP._y andZ:valueP._z];

       _radius = valueR;

    //第四步,返回self

       return self;

}

 

二、dealloc析构

类型是(void),不用return

- (void)dealloc

{

       //if(_origin)

    //if()写在这里纯粹是废话,二次删除的错误不是用if就可以避免的。Release只是释放了空间,但释放空间之后指针还是指向那块空间,这和C++中的delete是一样的。所以不论之前是否release了,指针都是真的,if都是会被执行的,除非我们已经自己把指针置为了nil。

       [_origin release];

       [super dealloc];//必须调用父类的dealloc函数。

}

 

三、description描述

类型是(NSString*)。

当使用@"%@"加上对象的时候,description会被自动调用。

- (NSString*)description

{

       NSString*temp=[NSString stringWithFormat:@"%@,radius=%f",_origin,_radius]; 

       return temp;

}

 

四、copy拷贝构造

类型是(id),和init一样,拷贝构造当然要返回self

- (id)copyWithZone:(NSZone *)zone

{

       Circle *temp;

       temp = [[[self class] allocWithZone:zone]initWith:self.radius andPoint:self.origin];

       return temp;

}

 

五、encodeWithCoder编码

类型是(void),没有返回值

- (void)encodeWithCoder:(NSCoder *)coder //编码方法

{

       //实例变量,加键值

       [coder encodeObject:titleText forKey:SAMPLEDATA_KEY_TITLE];

       [coder encodeInt:starCount forKey:@"star"];

}

initWithCoder解码

- (id)initWithCoder:(NSCoder *)decoder //解码方法

{

       //创建临时对象

       if ((self = [super init])) 

       {

              //初始化临时对象的实例变量

              self.titleText = nil;

              //self.items = [[NSMutableDictionary alloc]init];

              starCount = 0;

              tempNumber = 0;

              if (nil == decoder)

              {

                     return self;

              }

       }

       

       //解码,根据键值先判断

       if ([decoder containsValueForKey:SAMPLEDATA_KEY_TITLE]) 

       {

              //根据键值进行解码

              self.titleText = [decoder decodeObjectForKey:SAMPLEDATA_KEY_TITLE];

       }

       

              

       if ([decoder containsValueForKey:@"star"]) 

       {

              starCount = [decoder decodeIntForKey:@"star"];

       }

       

       //返回self

       return self;

       

}

转载于:https://www.cnblogs.com/on-the-way-leopard/archive/2013/05/30/3108046.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值