OC中的构造函数

来源:互联网 发布:计算器编程 编辑:程序博客网 时间:2024/06/06 04:00

在OC中的构造函数和C++中有很大相似之处,但是也有不同,下面我们就来看看在OC中构造函数的,声明,定义和调用。

在这个地方我们通过一个例子来说明:

我们在OC中创建一个Person类:

Person.h:

#import <Foundation/Foundation.h>
@interface Person : NSObject
@property NSString *pname;
@property int age;
@property NSString *address;

//声明构造函数,可以看到的是:构造函数有实例构造函数,和类构造函数,当然实例构造函数顾名思义就是通过创建实例类初始化对象,类构造函数是直接又类名调用。那么两者的定义有怎样的区别:,首先是知道的构造函数的返回值都是一个实例,(instancetype),实例构造函数最前面是一个 ‘-’然而类构造函数的最前面是''+",而且实例构造函数在最开始的字符都是initWith

而且With的W是必须大写的,这个是有参数的实例化对象的。

-(instancetype)initWithPname:(NSString *)pname age:(int)age andAddress:(NSString *)address;
+(instancetype)personWithPname:(NSString *)pname age:(int)age andAddress:(NSString *)address;
@end
//构造函数的定义:

#import "Person.h"
@implementation Person
-(instancetype)initWithPname:(NSString *)pname age:(int)age andAddress:(NSString *)address
{

  if([super init])//对父类进行初始化
  {
      self.pname=pname;//调用set函数给对象进行赋值
      self.age=age;
      self.address=address;
  }
    return self;//最后的返回值是一个对象的本身。
}
+(instancetype)personWithPname:(NSString *)pname age:(int)age andAddress:(NSString *)address
{//这个是类的构造方法,在这个构造方法其实是首先为对象分配内存,然后调用方面的方法为成员变量进行赋值
    return [[self alloc] initWithPname:pname age:age andAddress:address];
}

//最后是方法的调用:

#import <Foundation/Foundation.h>
#import "Person.h"
int main(int argc, const char * argv[]) {
    @autoreleasepool {
        //Person *per = [Person new];这个地方实例化一个对象,并且调用的是默认的构造函数
        //Person *per = [[Person alloc] init];//这个地方的实际上也是调用默认的构造函数,上面的new其实不仅仅有分配内存空间的作用,而且还能初始化对象,所谓的初始化对象是给成员变量进行赋值,但是我们并不知到赋的是什么值,可以这样理解,创建对象的时候,对象就像没有被修理的土地一样,杂草丛生,但是当我们实例化对象就不同了,我们像给对土地清理干净了。
        //Person *per = [[Person alloc] initWithPname:@"帅的不要不要的" age:18 andAddress:@"苏州"];

//这个是我们利用自己定义的构造函数来实例化对象,而且要知道的是我们利用自己创建构造函数来实例化对象的时候,是需要为首先是分配内存空间然后调用构造函数

       Person *per = [Person personWithPname:@"帅的不要不要的" age:18 andAddress:@"苏州"];
//而且还要知道的是这个地方是通过类名来调用构造函数。      

NSLog(@"%@",per);
    }
    return 0;
}




0 0