入门客AI创业平台(我带你入门,你带我飞行)
博文笔记

OC学习篇之---类的初始化方法和点语法的使用

创建时间:2014-12-02 投稿人: 浏览次数:36593

昨天介绍了OC中类的定义和使用:http://blog.csdn.net/jiangwei0910410003/article/details/41657603,今天我们来继续学习类的初始化方法和点语法的使用


一、首先来看一下类的初始化方法

在Java中我们知道一个每个类都有构造方法,这里的初始化方法就是和构造方法一个概念的,但是这里有一个区别是:Java中有默认构造方法,当我们去自定义构造方法的时候,这个默认构造方法就会被替换了,但是OC中是不会的,这点需要注意。

下面来看一下如何自定义初始化方法:

Person.h

//
//  Person.h
//  03_InitDemo
//
//  Created by jiangwei on 14-10-10.
//  Copyright (c) 2014年 jiangwei. All rights reserved.
//

#import <Foundation/Foundation.h>

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

//自定义初始化方法,必须以init开头
- (id)initWithName:(NSString *)name withAge:(NSInteger)age;

//打印信息
- (void)showInfo;

@end
这里我们定义了一个初始化方法,对名称和年龄进行初始化赋值操作

注:OC中自定义初始化方法的名称必须是以init开头


在来看一下实现:

Person.m

//
//  Person.m
//  03_InitDemo
//
//  Created by jiangwei on 14-10-10.
//  Copyright (c) 2014年 jiangwei. All rights reserved.
//

#import "Person.h"

@implementation Person

- (id)initWithName:(NSString *)name withAge:(NSInteger)age{
    //固定写法,可以背下来哦~~
    
    //调用父类的初始化方法
    self = [super init];
    
    if(self != nil){
        _name = name;
        _age = age;
    }
    
    return self;
}

- (void)test{
    NSLog(@"test");
}

- (void)showInfo{
    [self test];//调用自己的方法
    NSLog(@"name is %@ and age is %d",_name,_age);
}

@end
这里我们看到了,初始化方法返回的类型是id类型,关于OC中的id类型,可以认为和C语言中的void*是相等的,这种类型在OC中经常被用到,还有就是self关键字的使用,这里的self关键字就相当于Java中的this关键字,指代当前类对象,还有super关键字,这个和Java中的super也是一样的,指代父类对象。还有一个是nil,他就相当于Java中的null,空对象的概念,用于判断的。

同时这里还要记住一点:

以后OC中自定义初始化的方法的模板:

//固定写法,可以背下来哦~~
//调用父类的初始化方法
self = [super init];
if(self != nil){
    _name = name;
    _age = age;
}  
return self;
这个没什么好说的,就是一个模板,所以初学者就背下来吧,不过用多了,自然就记住了。


下面来看一下如何使用初始化方法:

main.m

//
//  main.m
//  03_InitDemo
//
//  Created by jiangwei on 14-10-10.
//  Copyright (c) 2014年 jiangwei. All rights reserved.
//

#import <Foundation/Foundation.h>

#import "Person.h"

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        //初始化方法只能调用一次
        Person *person = [[Person alloc] initWithName:@"jiangwei" withAge:22];
        [person showInfo];
        
        person = [[Person alloc] init];
        [person showInfo];
        
        //id类型,类似于void*
        //但是id类型一般不这么使用,一般会作为方法的返回值和传入的参数类型
        id person1 = [[Person alloc] initWithName:@"huangdaoyang" withAge:23];
        [person1 showInfo];
    }
    return 0;
}
我们使用了我们自定义的方法实例化了一个Person对象出来,同时调用他的showInfo方法,打印结果,这里我们也会发现Person的init方法任然可以使用,这个和Java中是有区别的,其实,在上篇文章中说到过,这个init方法是NSObject父类的,可以猜想到这个方法的逻辑功能就是初始化,所以我们在自定义初始化方法的时候,都是会用到这个方法的。当然我们可以定义多个初始化方法,后面我们在介绍Foundation框架的时候,会发现系统给我提供的类有很多自定义的初始化方法。

运行结果:

声明:该文观点仅代表作者本人,入门客AI创业平台信息发布平台仅提供信息存储空间服务,如有疑问请联系rumenke@qq.com。