【OC学习-5】OC里面怎么实例化一个对象?以及什么是消息传递?
2014-08-28 16:53
344 查看
我们之前的例子是这样的:
其实,alloc和release都是NSObject里面的类方法(前面是加号+的那种),所以可以直接用类名字来调用,如ASStudent alloc。
当然这两个方法的意思是分配一个内存,以及回收一个内存:逻辑是alloc一次,这个对象计数器就+1,release一次,这个对象计数器就-1,当计数器是0时,系统自动释放内存。
而上面的实例化并初始化对象其实分两步:
如果我们实例化一个对象,但是不给它分配内存地址,那么这个对象指针就没有指向,就是个野指针,但如果我们确实不想给这个对象任何内容,那么应该用空对象赋值:
消息传递(message passing)是什么呢?看下面我们之前写的:
所以消息传递就是我们之前所说的调用某个函数。但是在OC里面确实是消息传递,而不是调用,C++这些语言里是调用,一般是这种形式student.setName("tom")。所以注意以下这个称呼的转换即可。
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")。所以注意以下这个称呼的转换即可。
相关文章推荐
- 【OC学习-12】什么是类的继承?为什么要继承?以及继承里面的注意事项
- 【OC学习-12】什么是类的继承?为什么要继承?以及继承里面的注意事项
- .net中的对象序列化(1): 序列化是什么, 以及一个简单的例子
- JNI学习积累之三 ---- 操作JNI函数以及复杂对象传递
- 【OC学习-7】2种常用的对象初始化方法以及方法的具体写法
- 【OC学习-28】自定义对象的归档和解归档:例子说明以及简单总结
- 【OC学习-19】NSDictionary字典对象的初始化以及常用操作方法归纳
- 框架学习:框架是什么以及框架怎么学
- JNI学习积累之三 ---- 操作JNI函数以及复杂对象传递
- 【OC学习-10】写一个复数相加的例子来谈谈OC的self是什么意思?
- JNI学习积累之三 ---- 操作JNI函数以及复杂对象传递
- 【OC学习-27】对象的归档以及解归档——标准数据和自定义数据的例子
- selenium webdriver学习(十)-怎么把一个元素拖放到另一个元素里面
- JNI学习积累之三 ---- 操作JNI函数以及复杂对象传递
- [iphone 开发学习笔记]Object-C和C语言最大的区别也是最大的扩展-----消息(即如何调用一个对象中的函数)
- JNI学习积累之三 ---- 操作JNI函数以及复杂对象传递
- 两个JSP页面之间如何传递一个对象?比如一个LIST或者HASHMAP?以及为什么有时候REQUEST.GETATTRIBUTE("NAME")取不到值?
- 黑马程序员-我的第十篇学习日记:OC中点语法,@property和@synthesize,完整创建一个可用对象
- 【OC学习-20】NSSet集合对象初始化以及常用操作方法归纳
- 【OC学习-15】如何判断两个对象是否属于同一个类?如何判断一个对象是否属于某一个类?