黑马程序员 OC------- id类型: 构造方法学习

来源:互联网 发布:java 关闭 一个 进程 编辑:程序博客网 时间:2024/05/01 22:48

---------------------- <a href="http://www.itheima.com"target="blank">ASP.Net+Unity开发</a>、<a href="http://www.itheima.com"target="blank">.Net培训</a>、期待与您交流! ---------------------- 


id类型

数据类型:

     1.可以用来定义变量

     2.可以用来当作参数

     3.可以用来当作返回值

     

     id类型是一个万能指针(可以保持任何对象的地址)

     id相当于 NSObject *

id的本质 typedef struct objc_object *id;

id是一个动态类型,在运行时才确定id的真实类型

id类型还可以调用私有方法

id和NSObject *的区别:id调用子类特有的方法不用强制类型转换

构造方法

 什么是构造方法:

     构造方法主要是用来初始化成员变量

     如果想让对象一创建出来就具备一些值,我们可以重写构造方法(init)

1.开辟存储空间 +alloc

    2.初始化成员变量 -init

   3.返回地址

例如:

Person *p = [Person new];就等同于

Person *p = [[Person alloc] init];

如果想让一个成员变量初始化就赋值:

可以写成例如下面的格式

- (id)init{

if (self = [super init]) {

        _age = age;//成员变量赋值

    return self;

}

    }


例题说明;      

枪类

#import <Foundation/Foundation.h>


@interface Gun : NSObject


@property int bulletCount;//子弹数量


/*

 射击方法

 */

- (void)shoot;

@end


#import "Gun.h"

@implementation Gun


- (id)init

{

    if (self = [superinit]) {

        _bulletCount = 10;

    }

    return self;

}

- (void)shoot

{

    if (_bulletCount >0) {

        NSLog(@"开了一枪");

        _bulletCount--;

    }else

    {

        NSLog(@"请上子弹");

    }

    NSLog(@"剩余子弹 %d", _bulletCount);

}

@end

      警察类

@interface Police :NSObject


@property Gun *gun;

// 打手枪

- (void)fire;

@end


#import "Police.h"

@implementation Police


- (id)init

{

//    1.一定要调用父类的init方法

    self = [superinit];

//    2.一定要判断self是否为空

    if (self) {

        _gun = [[Gunalloc]init];

                   }

//    3.一定要返回self

    return self;


}



- (void)fire

{

//    OC中没有空指针异常,也就是给Nil发送消息不会报错

    [_gun shoot];

}

@end


#import "Police.h"

#import "Gun.h"

     main函数

int main(int argc,constchar * argv[])

{


  Police *p  = [[Policealloc]init];

[p fire];

    

    return 0;

}

---------------------- <a href="http://www.itheima.com"target="blank">ASP.Net+Unity开发</a>、<a href="http://www.itheima.com"target="blank">.Net培训</a>、期待与您交流! ---------------------- 

0 0
原创粉丝点击