Object-C学習ノート6 OCバンドパラメータ構築関数


Object-C学習ノートOCバンドパラメータ構築関数


OCがオブジェクトを作成するときに関数を構築する呼び出しは自動と
1自動呼び出しのコンストラクション関数にパラメータはありません
[person new]自動呼び出し構築方法
      [[Person allow]  init];
2コンストラクション標準のコンストラクション関数にはカスタムパラメータがあります
       init  -> NSObject
       -(instancetype)initWith ...このメソッドはinitWithで始まるコンパイラでなければ構造関数とみなされません
 
//
//  main.m
//   
//
//  Created by game912 on 2018/12/21.
//  Copyright © 2018  john. All rights reserved.
//

#import 
#import "Person.h"


int main(int argc, const char * argv[]) {
    @autoreleasepool {
        // insert code here...
        NSLog(@"Hello, World!");
        
        Person* P = [Person  new];//    == [[Person alloc] init];
        [P showMessaga];
        
        
        Person* p2 = [[Person alloc] initWithName:@" "];
        [p2 showMessaga];
        
        Person* p3 = [[Person alloc] initWithPara:@" " age:18];
        [p3 showMessaga];
        
        
    }
    return 0;
}

 
カスタムコンストラクション関数は、-(instancetype)initWithで始まるインスタンスメソッドです.
 
//
//  Person.h
//   
//
//  Created by game912 on 2018/12/21.
//  Copyright © 2018  john. All rights reserved.
//

#import 

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

//     
-(instancetype)initWithName:(NSString*) name;
//     
-(instancetype)initWithPara:(NSString*)name age:(NSInteger)age;

-(void)showMessaga;

@end

 
 
//
//  Person.m
//   
//
//  Created by game912 on 2018/12/21.
//  Copyright © 2018  john. All rights reserved.
//

#import "Person.h"

@implementation Person

/// 
- (instancetype)init
{
    self = [super init];
    if (self) {
        NSLog(@" ");
    }
    return self;
}


//   
-(instancetype)initWithName:(NSString*) name{

    self = [super init];
    if(self)
    {
        NSLog(@" ");
        _name = name;
    }
    return self;
}

//     
-(instancetype)initWithPara:(NSString*)name age:(NSInteger)age
{
    self = [super init];//    self = [super initWith...]
    if(self)
    {
        NSLog(@" ");
        _name = name;
        _age  = age;
    }
    return self;
}


-(void)showMessaga{
    NSLog(@" _name:%@   _age:%ld",_name, _age);
}

@end

 
カスタムコンストラクションメソッドを呼び出すと、一般的に親のコンストラクションメソッドが呼び出されます.親のコンストラクションメソッドもカスタムコンストラクションメソッドである可能性があります.
//     
-(instancetype)initWithPara:(NSString*)name age:(NSInteger)age
{
    self = [super init];//    self = [super initWith...]
    if(self)
    {
        NSLog(@" ");
        _name = name;
        _age  = age;
    }
    return self;
}