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

本文详细介绍了Objective-C中的构造方法,包括如何初始化成员变量、使用+alloc和-init方法的过程,并通过具体的实例展示了如何为对象设置初始值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

---------------------- <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>、期待与您交流! ---------------------- 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值