【OC学习-5】OC里面怎么实例化一个对象?以及什么是消息传递?

本文详细介绍了Objective-C中对象的内存管理方法,包括alloc和release如何改变对象的引用计数,以及如何通过消息传递机制调用对象的方法。

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

我们之前的例子是这样的:

ASStudent * student = [[ASStudent alloc]init];  //实例化并初始化一个对象
[student release];  //释放这个对象所占用的内存

其实,alloc和release都是NSObject里面的类方法(前面是加号+的那种),所以可以直接用类名字来调用,如ASStudent alloc。


当然这两个方法的意思是分配一个内存,以及回收一个内存:逻辑是alloc一次,这个对象计数器就+1,release一次,这个对象计数器就-1,当计数器是0时,系统自动释放内存。


而上面的实例化并初始化对象其实分两步:

//先分配内存,但其实是指向内存的指针,所以student前面加*表示这对象其实是个对象指针,两者不特别声明时可随意叫
//点击看NSObject类的alloc和release的返回值都是(id),即通用对象指针
//一般的对象都存在堆区(有栈区、堆区、数据区、只读区),堆区的对象没有名字不可以直接访问,所以需要命名个指针,指向这个堆区的对象,利用指针使用对象
ASStudent * student = [ASStudent alloc];  //后面返回是一个指针,前面定义的也是个指针,所以能赋值

//分配内存后一般都会初始化为根类默认的0,但是有时候我们需要初始化为自己想要的状态,所以需要自己初始化一次,这个后面细讲,因为要编写这个init函数
student = [student init];  //init是实例方法,所以用对象来调用,它的返回值也是(id),继续赋值给student本身,也就是初始化了一次

如果我们实例化一个对象,但是不给它分配内存地址,那么这个对象指针就没有指向,就是个野指针,但如果我们确实不想给这个对象任何内容,那么应该用空对象赋值:

//nil就是一个空对象,而NULL是一个空值,所以只能用nil,不能用NULL
ASStudent * student = nil;

消息传递(message passing)是什么呢?看下面我们之前写的:

//给student发送一个setName消息,内容是设置名字为tom
[student setName:@"tom"];

所以消息传递就是我们之前所说的调用某个函数。但是在OC里面确实是消息传递,而不是调用,C++这些语言里是调用,一般是这种形式student.setName("tom")。所以注意以下这个称呼的转换即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值