OC 方法调用方式,new 方法实现原理,oc自定义构造方法:

0: OC 方法调用方式:
对象方法用对象指针进行调用
类方法用类名调用(这一点和java 也差不多的,只不过java 也是可以通过对象来调用的)


声明一个类:里面有两个方法,一个是类方法,一个对象方法

//
//  Person.h
//  MethodUsed
//
//  Created by 千 on 16/7/24.
//  Copyright © 2016年 kodulf. All rights reserved.
//


#import <Foundation/Foundation.h>


@interface Person : NSObject
//-开头的是对象方法
-(void) eat;
//+开头的是类方法
+(NSString *) personWithName:(NSString *) name;
@end

+++++
//
//  Person.m
//  MethodUsed
//
//  Created by 千 on 16/7/24.
//  Copyright © 2016年 kodulf. All rights reserved.
//


#import "Person.h"


@implementation Person
//前面是减号就是对象方法
-(void) eat{
    
};
//前面是+号就是类方法
+(NSString *) personWithName:(NSString *) name{
    return [NSString stringWithFormat:@"我的名字叫%@",name];
};
@end


+++++++++
import进去
//
//  main.m
//  MethodUsed
//
//  Created by 千 on 16/7/24.
//  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!");
        
        Person *person =[Person new];//注意前面是应该是类型的指针
        //对象方法使用对象调用
        [person eat];
        //类方法使用类来调用
        NSString *name =[Person personWithName:@"kodulf"];
        NSLog(@"%@",name);
    }
    return 0;
}


+++++++++++++
1: new 方法实现原理
//
//  main.m
//  MethodUsed
//
//  Created by 千 on 16/7/24.
//  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!");
        
        Person *person2 =[Person new];//注意前面是应该是类型的指针
        NSLog(@"对象的地址:%p\n",person2);//p是地址的意思
        NSLog(@"对象的description:%@\n",person2);
        
        
        //对象方法使用对象调用
        [person2 eat];
        //类方法使用类来调用
        NSString *name =[Person personWithName:@"kodulf"];
        NSLog(@"%@",name);
        
        
        //new 方法实现原理:,我们只要了解就好了,平时直接使用new 就可以了
        Person *person =[Person new];//注意前面是应该是类型的指针
        //new 方法实现原理:
        //1,给对象分配内存空间地址
        //2,给对象完成默认的初始化操作
        //3,返回对象空间地址给对象指针
        person=nil;//防止野指针
        //person=[Person alloc];//这个只会执行上面的第一步就是给对象分配内存空间地址
        //person=[Person init];//执行的是第二部,给对象完成默认的初始化操作
        //上面的两步可以缩减为下面的一步,
        person=[[Person alloc] init];
    }
    return 0;
}

+++++++++++++

2: oc自定义构造方法:

创建一个Person类

//
//  Person.h
//  CustomerStruct
//
//  Created by 千 on 16/7/24.
//  Copyright © 2016年 kodulf. All rights reserved.
//


#import <Foundation/Foundation.h>


@interface Person : NSObject
{
    NSString *_name;
    NSUInteger _age;
    NSString *_sex;
}
//自定义构造方法的声明:返回的是instancetype的类型的
-(instancetype)initWithName:(NSString *)name;
-(instancetype)initWithAge:(NSUInteger)age;
-(instancetype)initWithALL:(NSString *)name age:(NSUInteger)age sex:(NSString *)sex;
//注意上面的写法不能错了,age:()age   sex:()sex ,第一个name 不用


@end

++++++

//
//  Person.m
//  CustomerStruct
//
//  Created by 千 on 16/7/24.
//  Copyright © 2016年 kodulf. All rights reserved.
//


#import "Person.h"


@implementation Person


//在这里实现在h文件中声明的构造方法:
-(instancetype)initWithName:(NSString *)name{
    self = [super init];//调用父类的初始化方法
    if(self){
        _name =name;
        _age=0;
        _sex=@"男";
    }
    return self;
    //其实可以调用我们的initWithALL的构造方法的话只要虾面的一句话
    //return [self initWithALL:name age:23 sex:@"male"];
}
-(instancetype)initWithAge:(NSUInteger)age{
    self =[super init];
    if(self){
        _name = @"初始化有age的名字";
        _age=age;
        _sex=@"male";
    }
    return self;
    //其实可以调用我们的initWithALL的构造方法的话只要虾面的一句话
    //return [self initWithALL:@"初始化有age的名字" age:age sex:@"male"];
}


-(instancetype)initWithALL:(NSString *)name age:(NSUInteger)age sex:(NSString *)sex{
    self = [super init];
    if(self){
        _name=name;
        _sex=sex;
        _age=age;
    }
    
    return self;
    
}


- (NSString *)description
{
    return [NSString stringWithFormat:@"description输出 name=%@ age =%zd sex =%@",_name,_age,_sex];//age的输出是zd
}


@end



++++++
//
//  main.m
//  CustomerStruct
//
//  Created by 千 on 16/7/24.
//  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!\n");


        //Person *person =[Person new];
        Person *person =[[Person alloc] initWithAge:123];
        NSLog(@"使用initWithAge的构造方法%@\n",person);
        
        person =[[Person alloc] initWithName:@"张山"];
        NSLog(@"使用initWithName的构造方法%@\n",person);
        
        person =[[Person alloc] initWithALL:@"kodulf" age:100 sex:@"男"];
        NSLog(@"使用all的构造方法%@\n",person);
    
    }
    return 0;
}

+++++++
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值