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
    评论
自定义事件是指在程序自定义一个事件类型,并且在特定的情况下触发该事件,以便执行相应的操作。以下是实现自定义事件的基本步骤: 1. 定义事件类型:首先需要定义一个事件类型,该类型通常继承自 `EventArgs` 类。例如,我们可以定义一个名为 `CustomEventArgs` 的事件类型。 ```csharp public class CustomEventArgs : EventArgs { public CustomEventArgs(string message) { Message = message; } public string Message { get; } } ``` 2. 定义事件处理程序:事件处理程序是用于处理事件的方法。在这个步骤,我们需要定义一个事件处理程序,该处理程序将在事件被触发时执行。例如,我们可以定义一个名为 `OnCustomEvent` 的事件处理程序。 ```csharp public event EventHandler<CustomEventArgs> CustomEvent; protected virtual void OnCustomEvent(CustomEventArgs e) { CustomEvent?.Invoke(this, e); } ``` 3. 触发事件:当特定的情况发生时,我们需要触发事件以执行相应的操作。例如,我们可以在某个方法触发自定义事件。 ```csharp public void DoSomething() { // some logic OnCustomEvent(new CustomEventArgs("Something happened.")); } ``` 4. 注册事件处理程序:在使用自定义事件之前,我们需要将事件处理程序注册到事件。例如,我们可以在构造函数注册事件处理程序。 ```csharp public MyClass() { CustomEvent += HandleCustomEvent; } private void HandleCustomEvent(object sender, CustomEventArgs e) { Console.WriteLine($"Custom event: {e.Message}"); } ``` 以上是实现自定义事件的基本步骤,你可以根据具体的需求进行修改和扩展。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值