黑马程序员技术交流社区

标题: OC学习之重写构造方法的应用场景 [打印本页]

作者: 毛强    时间: 2015-8-18 15:19
标题: OC学习之重写构造方法的应用场景
构造方法;用来初始化对象的方法,是个对象方法。
重写构造方法的目的,为了让对象创建出来,成员变量就会有一些固定的值

构造方法init结构:
-(id)init{
self = [super init];
if(self)
{
//-------
}
return self;
}
下面举例说明重写构造方法的应用:
//士兵类
//----------------Soldier.h---------------------------
/#import
#import "Gun.h"

@interface Soldier : NSObject
@property Gun *gun;
-(void)fire;
@end
//------------------Soldier.m----------------------------
#import "Soldier.h"

@implementation Soldier
-(instancetype)init{
    if(self = [super init])
    {
        Gun *gun = [Gun new];
        _gun = gun;
    }
    return self;
}
-(void)fire{
    [_gun shoot];
}

@end

//枪类
//-----------------------Gun.h---------------------------------
#import
@interface Gun : NSObject

@property int bulletCount;
-(void)shoot;


@end
//-----------------------Gun.m---------------------------------
#import "Gun.h"

@implementation Gun
-(void)shoot{
    _bulletCount--;
    NSLog(@"枪在凸凸凸凸射击,剩余子弹%d",_bulletCount);
}
-(instancetype)init{
    if(self = [super init])
    {
        _bulletCount = 3;
    }
    return self;
}

@end

//--------------------------------main.m---------------------------------
#import
#import "Soldier.h"

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        
        
        Soldier *s = [Soldier new];
        [s fire];
        
        for (int i=0; i<</span>10; i++)
        {
            Soldier *s = [Soldier new];
            [s fire];
            [s fire];
            [s fire];
            
        }
    }
    return 0;

}

在这个程序中,我们知道如果没有重写构造方法,那么枪类实例化对象之后不会有子弹,士兵类实例化对象之后不会有枪。通过重写构造函数可以改变成员变量的一些固有属性,为我们编写程序提供了方便。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2