深入地学习OC(2)

今天我想写的是关于构造函数的知识

首先先明白以init 开头的都是构造函数,重写是子类的方法覆盖父类的方法,要求方法名和参数都相同

重载是在同一个类中的两个或两个以上的方法,拥有相同的方法名, 但是参数却不相同,方法体也不相同。最想见的重载的例子就是类的构造函数,

//自定义构造函数

//-(id)init

-(id)intWithAge:(NSInteger)newAge andName:(NSString *)newName;

 1 -(id)init{
 2 self=[super init];//父类调用自身init方法,赋值给self,即classD本身的对象
 3 if(self){
 4 //此部分做所有的初始化工作
 5  self.age=0;
 6 self.name=@"hhh";
 7 }
 8 return self;//返回初始化完成的对象本身
 9 }
10 -(id)initWithAge:(NSInteger)newAge andName:(NSString *)newName{
11 self=[super init];
12 if(self){
13 self.age=newAge;//形参newAge接受外部实参的值,赋值给属性age
14 self.name=newName;//形参newAge接受外部实参的值,赋值给属性name
15 }
16 return self;
17 }

上面的代码是在方法里面实现的,这里在主函数里面调用的话就要这样子写

ClassD *obj4=[[ClassD alloc]init];

            /**这里调用的init方法,会优先在ClassD中找,如果找不到,往父类中找,找到的话,则优先调用自己类中的init,其它函数亦如此**/

            NSLog(@"obj4.age = %ld,obj4.name = %@",obj4.age,obj4.name);

            

            

            ClassD *obj5=[[ClassD alloc]initWithAge:25 andName:@"Tom"];

            /**在给对象初始化的工作中,直接完成参数的传递,对象会调用自己的自定义初始化函数,将实参的值传递给形参,形参再赋值给属性(见方法的实现部分)**/

            NSLog(@"obj5.age = %ld,obj5.name = %@",obj5.age,obj5.name);

 
原文地址:https://www.cnblogs.com/canfeng/p/4924317.html