A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© luguo 中级黑马   /  2015-6-11 11:08  /  594 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

(21)用通用指针id接受一个对象后,要调用该对象的方法时不需要将id类型强制转换。

(22)重写init方法时,需要调用self=[super init];是固定写法。而且应该再后面增加一个判断if(self!=nil){},即只有父类初始化正常不反悔nil,才继续执行。死记硬背吧。优化写法就是if(self=[super init]){}。一般重写init,就似乎为了给某些属性固定值。

(23)类也不能互相在.h文件中#import导入。但可以利用@Class Person;代替(该语句仅仅是告诉编译器Person是一个类,这样就不会报错),且后者效率更高,在开发大型项目时会用到。有时候一般是在.h文件中用@Class ***,在.m文件中#import “***.h”,因为如果不导入的话,在.m中无法使用那个类的方法。

(24)所谓的内存管理:基本数据类型都是存放在栈中,作用域结束就自动失效。对象指针也是存放在栈中的,但对象指针指向的对象是存在堆中的,如果在作用域结束之前没有回收内存,那么对象指针被失效后,在堆中就会存在一个没有被回收的对象继续占用内存。

(25)当一个对象被回收时会调用类的dealloc方法,我们可以在重写这个dealloc方法。在重写时约定俗成在最后加[super dealloc];语句。

(26)当指针指向的对象引用计数为0时就会被销毁,那么此时这个指针就是一个野指针,因为它指向一个不存在的内存空间。

(27)一般如果有新的指针指向一个对象时们应该用retain为对象引用计数加1,否则直接指向的话,会有2个指针指向这个对象,但是其引用计数只有1,release一次就会出错。

(28)如果严谨一些的代码在对象指针release后,会把相应地对象指针设置为nil空值。

(29)用@property时候()里面:如果是OC对象类型则用retain/copy,基本数据类型就用assign。就是用到内存管理规则。

(30)系统自带的方法:如果不包含alloc、copy等,那么它们返回的对象都已经被autorelease过了。我们可以在创建对象的时候快速创建一个autorelease对象,这样别人在调用我们的对象时就不用考虑release的问题,此时创建最好用self而不用类名。

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马