iPhone基础概念:斯坦福教程第一讲笔记
2010-01-26 10:41
489 查看
作者 lolfriend
原帖地址 http://www.cocoachina.com/bbs/read.php?tid-5788-fpage-42.html
看斯坦福的iPhone视频有一段时间了,所以做点笔记提醒自己,也可以和大家一块儿讨论学习。
第一讲主要内容是 ObjC基本语法,语法其实很简单,三天就能适应。但是ObjC有很多理念非常重要,需要花时间编程实践才能理解。尤其我又不是学 ComputerScience的,java完全没看过,凭借仅有的C语言基础还是出现了很多理解问题。以下是我个人觉得非常重要或者是花了长时间才弄明 白的概念。下载视频教程及课件网址:http://www.stanford.edu/class/cs193p/cgi-bin/index.php
一、Inheritance:继承
和C++不同,Obj-C只有一个父类,并且只有一个超级父类NSObject(ObjC中所有的类都继承自NSObject)。
问 题来了,如果我新建一个类person.h,但又希望它能继承多个类如appearance.h,behavior.h,thought.h的方法怎么 办?我们可以这样,让person.h继承自appearance.h,而使用behavior.h,thought.h的delegat(委托)。当然 在behavior.h,thought.h中需要通过@protocol设置delegate,并在@optional中声明 delegate可用的方法。这样person.h就可以修改apperance.h中的所有方法,也可以修改在 bahavior.h,thought.h的@optional中声明的方法了。委托的使用方式在UITableViewController中非常常 见。
二、Object Creation:对象创建(create=alloc+init)
All objects are allocated out of the heap;No stack based objects. 说实在的,视频看到这里的时候我懵了好长时间,现在也没完全搞明白,可能有一点点java基础会很容易,可惜偶没有啊。
按我个人的理解是这样的:C++一般采用stack-basedobject,所以用C++编程时,在一个函数中我们可以直接对一个类进行实例化如 Person *aperson,然后就可以调用该对象的函数、公有成员变量,这是因为在执行Person *aperson这条代码时系统在堆栈当中给 aperson腾出了一个固定的空间,所以可以直接使用这个对象。但是同样的代码在objC中就不行,Person *aperson似乎什么事情也没做,只是声明有aperson这么个实例对象,内存没有为它分配空间,所以什么方法都不能执行,我们必须采用 alloc+init才算真正创建aperson 实例对象,然后才能调用它的方法。
三、Autorelease Pool:自动释放池
autorelease pool是个好东西,很多人都知道它的优点在哪里,也有很多介绍它的文章。与autorelease这个方法联用简直就是无敌!不过我想从另一个角度说这 个概念,它与上面讲的object creation有什么关系?(不懂java的人就是会想很多,呵呵)
二中提到:objects are allocated out of heap,但是毕竟所有的数据、对象最终都需要分配到内存空间然后才能被程序调用啊。注意:对象内存分配虽然不在heap或者stack当中,但当对象被 创建好了以后会被自动的放入autorelease pool中,而autorelease pool,以我浅薄的知识理解,其实就是一个heap(不知道说得对不对,请大家指正)。
另外想更多了解heap-based object和stack-based object,可以到该网址看看: http://blog.chinaunix.net/u/18418/showart_307250.html。 该文大概意思是这样的,heap和stack都是在内存中开辟一块儿区域给对象使用,不同的是如果用stack保存数据,那么compiler必须知道数 据长度,因为它分配的空间是固定长度的,而heap相当于一个池,可以把数据、对象一股脑都放进去,而不需要知道其具体长度,所以为操作提供灵活性。
原帖地址 http://www.cocoachina.com/bbs/read.php?tid-5788-fpage-42.html
看斯坦福的iPhone视频有一段时间了,所以做点笔记提醒自己,也可以和大家一块儿讨论学习。
第一讲主要内容是 ObjC基本语法,语法其实很简单,三天就能适应。但是ObjC有很多理念非常重要,需要花时间编程实践才能理解。尤其我又不是学 ComputerScience的,java完全没看过,凭借仅有的C语言基础还是出现了很多理解问题。以下是我个人觉得非常重要或者是花了长时间才弄明 白的概念。下载视频教程及课件网址:http://www.stanford.edu/class/cs193p/cgi-bin/index.php
一、Inheritance:继承
和C++不同,Obj-C只有一个父类,并且只有一个超级父类NSObject(ObjC中所有的类都继承自NSObject)。
问 题来了,如果我新建一个类person.h,但又希望它能继承多个类如appearance.h,behavior.h,thought.h的方法怎么 办?我们可以这样,让person.h继承自appearance.h,而使用behavior.h,thought.h的delegat(委托)。当然 在behavior.h,thought.h中需要通过@protocol设置delegate,并在@optional中声明 delegate可用的方法。这样person.h就可以修改apperance.h中的所有方法,也可以修改在 bahavior.h,thought.h的@optional中声明的方法了。委托的使用方式在UITableViewController中非常常 见。
二、Object Creation:对象创建(create=alloc+init)
All objects are allocated out of the heap;No stack based objects. 说实在的,视频看到这里的时候我懵了好长时间,现在也没完全搞明白,可能有一点点java基础会很容易,可惜偶没有啊。
按我个人的理解是这样的:C++一般采用stack-basedobject,所以用C++编程时,在一个函数中我们可以直接对一个类进行实例化如 Person *aperson,然后就可以调用该对象的函数、公有成员变量,这是因为在执行Person *aperson这条代码时系统在堆栈当中给 aperson腾出了一个固定的空间,所以可以直接使用这个对象。但是同样的代码在objC中就不行,Person *aperson似乎什么事情也没做,只是声明有aperson这么个实例对象,内存没有为它分配空间,所以什么方法都不能执行,我们必须采用 alloc+init才算真正创建aperson 实例对象,然后才能调用它的方法。
三、Autorelease Pool:自动释放池
autorelease pool是个好东西,很多人都知道它的优点在哪里,也有很多介绍它的文章。与autorelease这个方法联用简直就是无敌!不过我想从另一个角度说这 个概念,它与上面讲的object creation有什么关系?(不懂java的人就是会想很多,呵呵)
二中提到:objects are allocated out of heap,但是毕竟所有的数据、对象最终都需要分配到内存空间然后才能被程序调用啊。注意:对象内存分配虽然不在heap或者stack当中,但当对象被 创建好了以后会被自动的放入autorelease pool中,而autorelease pool,以我浅薄的知识理解,其实就是一个heap(不知道说得对不对,请大家指正)。
另外想更多了解heap-based object和stack-based object,可以到该网址看看: http://blog.chinaunix.net/u/18418/showart_307250.html。 该文大概意思是这样的,heap和stack都是在内存中开辟一块儿区域给对象使用,不同的是如果用stack保存数据,那么compiler必须知道数 据长度,因为它分配的空间是固定长度的,而heap相当于一个池,可以把数据、对象一股脑都放进去,而不需要知道其具体长度,所以为操作提供灵活性。
相关文章推荐
- iPhone开发基础教程 笔记
- SQL基础教程笔记(一)数据库概念
- python基础教程学习笔记 — 基本概念
- vSphere 虚拟化基础概念讲解与环境构建视频教程(笔记)
- 绘制对象iPhone开发基础教程 笔记
- python基础教程_学习笔记19:标准库:一些最爱——集合、堆和双端队列
- -数据库速成教程-(一) 基础知识与基本概念
- 【概念笔记】JAVA基础 - part2
- Objective-C基础教程学习笔记(十一)特性
- Objective-C基础教程学习笔记(十六)键/值编码
- NETTY基础教程(1):基本概念
- [Matlab]基础教程学习笔记(六):NoteBook的使用
- iPhone开发四剑客之《Objective-C基础教程》
- 【Android开发教程】一、基础概念
- [Matlab]基础教程学习笔记(四):二维高层绘图操作
- python基础教程_学习笔记4:元组
- Linux 程序设计学习笔记----终端及串口编程基础之概念详解
- PHP特级视频教程 笔记心得 第十六集 mysql调优,mysql优化 MySQL基础操作(一)
- CSS基础教程要点笔记