object-c的自定义构造方法,以及new方法实现原理

在object c中可以自定义构造方法,和java一样,只是实现稍微不同而已

首先要在h头文件中声明这个自定义的构造方法

//
//  Person.h
//  InstanceDemo
//
//  Created by 千 on 16/9/10.
//  Copyright © 2016年 kodulf. All rights reserved.
//

#import <Foundation/Foundation.h>

@interface Person : NSObject
{
    CGFloat _age;
    NSString *_name;
    CGFloat _height;
}

- (instancetype)initWithName:(NSString *)name;
- (instancetype)initWithAge:(CGFloat)age;
- (instancetype)initWithAll:(NSString *)name age:(CGFloat)age height:(CGFloat)height;
@end
然后再在m文件中去实现

//
//  Person.m
//  InstanceDemo
//
//  Created by 千 on 16/9/10.
//  Copyright © 2016年 kodulf. All rights reserved.
//

#import "Person.h"

@implementation Person
- (instancetype)initWithName:(NSString *)name{
  //调用方法的时候需要指定的相应的参数
    //构造方法,直接返回
    return [self initWithAll:@"初始化" age:2 height:170];
}
- (instancetype)initWithAge:(CGFloat)age{
    
    return [self initWithAll:@"初始化" age:age height:170];
    
    return self;
};
- (instancetype)initWithAll:(NSString *)name age:(CGFloat)age height:(CGFloat)height{
    //调用父类的初始化
    self = [super init];

    if(self){
        _name = name;
        _age = age;
        _height = height;
    }
    return self;

}

- (NSString *)description
{
    //[NSString stringWithFormat:<#(nonnull NSString *), ...#>]
    return [NSString stringWithFormat:@"description 输出名字:%@ 年龄%f 身高%f", _name,_age,_height];
}

@end

最后在main函数中调用

//
//  main.m
//  InstanceDemo
//
//  Created by 千 on 16/9/10.
//  Copyright © 2016年 kodulf. All rights reserved.
//

#import <Foundation/Foundation.h>
#import "Person.h"
int main(int argc, const char * argv[]) {
    @autoreleasepool {
        // insert code here...
        NSLog(@"Hello, World!");
        //注意了,new的方法,其实是alloc,init的组合
        //如果是要调用自定义的构造方法,那么就[[Person alloc] initWithAge:1.5]
        Person *xiaoming =[[Person alloc] initWithAge:1.5];
        NSLog(@"%@",xiaoming);
    }
    return 0;
}

注意了new方法的实现原理,其实new 方法可以分为两步,第一步是alloc,第二步是init,所以我们才可以在上面调用自定义的构造方法



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值