IOS ——OC——浅谈自定义初始化方法-便利构造器的使用

便利构造器的概念:
  • 便利构造器是一种快速创建对象的方式。
  • 它本质上是把初始化方法做了一次封装,方便外界使用。
  • 便利构造器是一个类方法。
  • 通常以类名开头,返回值仍然是id类型。       
在初始化的同时给成员变量赋值
初始化,产生一个对象,将其赋值给实例变量(对象)

注: 

  • 便利构造器的命名规范:必须以类名开头。
  • person的便利构造器为:[[[Person alloc]  init]  autorelease];   

       [[Person alloc] initWithAge:age andWithName:name];//有两个属性的写法,
 
便利初始化的调用:
 Person *p  = [Person initWithAge: 10 andWithName: @"jason"];// 在init时就赋值了age和name属性
 
便利初始化方法声明:
-(类名 *)initWith成员变量名:(类型)参数名
实现部分:
- (Student *)initWithName:(NSString *)newName{
    self = [super init];//通过父类调用init初始化方法,产生一个对象,此处的self就是类的对象 
    //判断是否初始化成功,未初始化之前,self = nil
    if (self) {
        //如果初始化成功,则进行相关操作(比如,给成员变量赋值)
        name = newName;
    }
    //将初始化完成后的对象返回
    return self;
}
 
便利构造器方法声明:
+(类名 *)类名小写With变量名
+ (Student *)studentWithName:(NSString *)newName andAge:(int)newAge;
便利构造器实现:
+(Student *)studentWithName:(NSString *)newName andAge:(int)newAge{
   
   //初始化一个对象
 
//原始的初始化方法
    Student *stu = [[Student alloc] init];
    //给成员变量赋值(类方法里无法直接使用成员变量,因为成员变量属于对象)
    stu->name = newName;
    stu->age = newAge;

   
   //便利初始化
   // Student *stu = [[Student alloc] initWithName:newName andAge:newAge];
    NSLog(@"---%@",stu->name);
    //将初始化完成后的对象返回
    return stu;
}
 便利构造器的调用,
  [类名  方法名 ];
  Student *stu = [Student studentWithName:@"老三" andAge:20];
例:
类接口:
#import <Foundation/Foundation.h>
@interface Car : NSObject
{
    NSString *mark;
    NSString *color;
    float    price;
    int      seat;
}
-(Car*)initWithMark:(NSString*)newMark andColor:(NSString*)newColor andPrice:(float)newPrice  andSeat:(int)newSeat;
-(void)introduction;
@end
类实现:
#import "Car.h"
@implementation Car
-(Car*)initWithMark:(NSString *)newMark andColor:(NSString *)newColor andPrice:(float)newPrice andSeat:(int)newSeat
{
    self = [super init];
    if (self) {
        mark = newMark;
        color = newColor;
        price = newPrice;
        seat = newSeat;
    }
    return self;
}
-(void)introduction
{
    NSLog(@"我是一辆%@汽车我是%@颜色我的售价是%.2f我有%d个座位!",mark,color,price,seat);
}
@end
主程序:
#import <Foundation/Foundation.h>
#import "Car.h"
int main(int argc, const char * argv[]) {
    @autoreleasepool {
        Car *car = [[Car alloc]initWithMark:@"Audi"  andColor:@"yellow"andPrice:100000000 andSeat:7];
       
    [car introduction];
    }
    return 0;
}
运行结果:
2015-10-20 15:33:07.707 10.20 下午课堂练习[2177:100206] 我是一辆Audi汽车我是yellow颜色我的售价是100000000.00我有7个座位!
运用便利构造器的例子:
(1)
类接口:
#import <Foundation/Foundation.h>
@interface AudiCar : NSObject
{
    NSString *color;
    float price;
    int seat;
}
-(AudiCar*)initWithColor:(NSString*)newcolor andPrice:(float)newprice andSeat:(int)newseat;
+(AudiCar*)audiCarWithColor:(NSString*)newcolor andPrice:(float)newprice andSeat:(int)newseat;
-(void)introduction;
@end
类实现:
#import "AudiCar.h"
@implementation AudiCar
-(AudiCar *)initWithColor:(NSString *)newcolor andPrice:(float)newprice andSeat:(int)newseat
{
    self = [super init];
    if(self)
    {
        color = newcolor;
        price = newprice;
        seat = newseat;
    }
    return self;
}
+(AudiCar *)audiCarWithColor:(NSString *)newcolor andPrice:(float)newprice andSeat:(int)newseat
{
    AudiCar *car = [[AudiCar alloc]initWithColor:newcolor andPrice:newprice andSeat:newseat];
     return car;
}
-(void)introduction
{
    NSLog(@"我是%@颜色价格是%f有%d个座位!",color,price,seat);
}
@end
主程序:
#import <Foundation/Foundation.h>
#import"AudiCar.h"
int main(int argc, const char * argv[])
{
    @autoreleasepool
   {
    AudiCar *car = [AudiCar audiCarWithColor:@"yellow" andPrice:41000.3 andSeat:7];
        [car introduction];
     }
    return 0;
}
运行结果:
2015-10-20 17:48:46.997 10.20 便利构造器 [3097:139957] 我是 yellow 颜色价格是 41000.300781 7 个座位!
(2)
类接口:
#import <Foundation/Foundation.h>
@interface Teacher : NSObject
{
    NSString *name;
    NSString *sex;
    int age;
    NSString *marriage;
}
-(void)sayHi;
-(void)gotowork;
-(Teacher*)initWithName:(NSString*)newname andSex:(NSString*)newsex andAge:(int)newage andMarriage:(NSString*)newmarriage;
+(Teacher*)teacherWithName:(NSString*)newname andSex:(NSString*)newsex andAge:(int)newage andMarriage:(NSString*)newmarriage;
@end
类实现:
#import "Teacher.h"
@implementation Teacher
-(void)sayHi
{
    NSLog(@"Goodmorning!");
}
-(void)gotowork
{
    NSLog(@"我坐公交车去上班!");
}
-(Teacher*)initWithName:(NSString *)newname andSex:(NSString *)newsex andAge:(int)newage andMarriage:(NSString *)newmarriage
{
    self = [super init];
    if(self)
    {
        name = newname;
        sex = newsex;
        age = newage;
        marriage = newmarriage;
    }
    return self;
}
+(Teacher*)teacherWithName:(NSString *)newname andSex:(NSString *)newsex andAge:(int)newage andMarriage:(NSString *)newmarriage
{
    Teacher *tea = [[Teacher alloc]initWithName:newname andSex:newsex andAge:newage andMarriage:newmarriage];
    return tea;
}
-(NSString*)description
{
    return[NSString stringWithFormat:@"我叫%@是个%@性今年%d目前%@!",name,sex,age,marriage];
}
@end
主程序:
#import <Foundation/Foundation.h>
#import "Teacher.h"
int main(int argc, const char * argv[])
{
    @autoreleasepool
    {
        Teacher *tea = [Teacher teacherWithName:@"xxx" andSex:@"男"andAge:28 andMarriage:@"未婚"];
        [tea sayHi];
        [tea gotowork];
         NSLog(@"%@",tea);
    }
    return 0;
}
运行结果:
2015-10-20 21:15:29.776 assignment  1[4336:196173] Goodmorning!
2015-10-20 21:15:29.777 assignment  1[4336:196173]
我坐公交车去上班!
2015-10-20 21:15:29.777 assignment  1[4336:196173] 我叫xxx是个男性今年28目前未婚
 

转载于:https://www.cnblogs.com/Rong-Shengcom/p/4939942.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
【优质项目推荐】 1、项目代码均经过严格本地测试,运行OK,确保功能稳定后才上传平台。可放心下载并立即投入使用,若遇到任何使用问题,随时欢迎私信反馈与沟通,博主会第一时间回复。 2、项目适用于计算机相关专业(如计科、信息安全、数据科学、人工智能、通信、物联网、自动化、电子信息等)的在校学生、专业教师,或企业员工,小白入门等都适用。 3、该项目不仅具有很高的学习借鉴价值,对于初学者来说,也是入门进阶的绝佳选择;当然也可以直接用于 毕设、课设、期末大作业或项目初期立项演示等。 3、开放创新:如果您有一定基础,且热爱探索钻研,可以在此代码基础上二次开发,进行修改、扩展,创造出属于自己的独特应用。 欢迎下载使用优质资源!欢迎借鉴使用,并欢迎学习交流,共同探索编程的无穷魅力! 基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip 基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip 基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值