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

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

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")。所以注意以下这个称呼的转换即可。

时间: 2024-10-05 05:06:30

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

黑马程序员——OC学习小结------OC内存管理

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 一.计数器 1.方法的基本使用 1> retain :计数器+1,会返回对象本身 2> release :计数器-1,没有返回值 3> retainCount :获取当前的计数器 4> dealloc: * 当一个对象要被回收的时候,就会调用 * 一定要调用[super dealloc],这句调用要放在最后面 2.概念 1> 僵尸对象 :所占用内存已经被回收的对象,僵尸对象

黑马程序员——OC学习小结------OC入门

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 一. 1.使用了基类NSObject,要调用Foundation框架的Foundation.h头文件. 2.一个完整的类,包含了类的声明和实现: 3.类的声明:声明对象的属性和行为 @interface Car : NSObject { // 用来声明对象属性(实例变量\成员变量,默认会初始化为0) // @public可以让外部的指针间接访问对象内部的成员变量 @public int whe

OC学习篇之---类的定义

之前已经介绍了OC中的一个程序HelloWorld:http://blog.csdn.net/jiangwei0910410003/article/details/41578003,今天我们继续学习OC中类的相关知识. OC和C的最大区别就是具有了面向对象的功能,那么说到面向对象,就不得不说类这个概念了,如果学过Java的话,那么对类和对象的概念就不陌生了,因为Java是非常纯正的面向对象设计语言.关于类和对象的概念,这里就不仔细介绍了,网上有各种解释.我们之间来开一下OC中如何定义一个类,如何

(转载)OC学习篇之---类的定义

之前已经介绍了OC中的一个程序HelloWorld,今天我们继续学习OC中类的相关知识. OC和C的最大区别就是具有了面向对象的功能,那么说到面向对象,就不得不说类这个概念了,如果学过Java的话,那么对类和对象的概念就不陌生了,因为Java是非常纯正的面向对象设计语言.关于类和对象的概念,这里就不仔细介绍了,网上有各种解释.我们之间来开一下OC中如何定义一个类,如何实例化出一个对象等. 首先我们新建一个工程,系统会自动创建main.m文件的,这时候,我们右键项目,选择New File.. 然后

黑马程序员-OC学习笔记之autorelease与自动释放池

---------------------- IOS开发.Android培训.期待与您交流! ---------------------- 一.autorelease autorelease与release相似,是OC中的一个对象方法.这两个方法都能把对象的引用计数器减1,但是release是一个精确的减1,对对象的操作只能在release之前进行,如果是在之后,就会出现野指针错误:而autorelease是一个不精确的引用计数器减1,当给对象发送autorelease消息时,对象就会被放到自动

OC学习篇之---单例模式

在之前的一片文章中介绍了对象的拷贝相关知识:http://blog.csdn.net/jiangwei0910410003/article/details/41926531,今天我们来看一下OC中的单例模式,单例模式在设计模式中用的可能是最多的一种了,而且也是最简单的一种 实现单例模式有三个条件 1.类的构造方法是私有的 2.类提供一个类方法用于产生对象 3.类中有一个私有的自己对象 针对于这三个条件,OC中都是可以做到的 1.类的构造方法是私有的 我们只需要重写allocWithZone方法,

OC学习16——对象归档

转载自  OC学习篇之---归档和解挡 OC中的归档就是将对象写入到一个文件中,Java中的ObjectInputStream和ObjectOutputStream来进行操作的.当然在操作的这些对象都是需要实现一个接口:Serializable,同样的OC中操作的对象也是需要实现一个协议的,后面会说到. 一.已有类型的归档和解档 首先来看一个简单的例子: 1 // 2 // main.m 3 // 33_ObjectToFile 4 // 5 // Created by jiangwei on

(转载)OC学习篇之---单例模式

在之前的一片文章中介绍了对象的拷贝相关知识,今天我们来看一下OC中的单例模式,单例模式在设计模式中用的可能是最多的一种了,而且也是最简单的一种 实现单例模式有三个条件 1.类的构造方法是私有的 2.类提供一个类方法用于产生对象 3.类中有一个私有的自己对象 针对于这三个条件,OC中都是可以做到的 1.类的构造方法是私有的 我们只需要重写allocWithZone方法,让初始化操作只执行一次 2.类提供一个类方法产生对象 这个可以直接定义一个类方法 3.类中有一个私有的自己对象 我们可以在.m文件

OC学习之书籍->Objective-C 程序设计第六版

最近时间比较充裕,想学习IOS开发,经过多方考察还是决定从oc学起,从基础的oc语法慢慢的走向cocoa框架的学习. oc的入门语言我我选择最新版的objective-c程序设计,主要是参考豆瓣的书评.借助51cto的博客,来记录下学习历程.