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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 18704635324 中级黑马   /  2016-7-14 23:40  /  1011 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

#program mark - 动态类型/静态类型
1>是什么?
是OC中用于修饰指向对象指针的一个概念,形容指针的类型
2>什么意思?
定义一个指针,这个指针的类型和指针指向的类型一致,此时这个指针就是静态类型
定义一个指针,这个指针的类型和指针指向的类型不一致,此时这个指针就是动态类型

#program mark - 内存管理的概述
"强调
1.内存中分为5个区:堆区,栈区,常量区,BBS段,代码段
1>堆区中存储的是对象,堆区的对象不会自动回收,如果程序员不手动回收的话,这些对象一直等到程序结束的时候才会回收.
2.
1>当这个对象有"人"在用的时候,千万不能释放
2>当这个对象没有"人"在用的时候,就释放
注意:
"人"的含义是对象的使用者
ios开发中,一张图片就是一个UIView类型的对象,当图片需要显示的时候创建这个对象,当关闭图片,不需要再使用,就释放图片

#program mark - 野指针与僵尸对象
1.在C语言中,野指针是未被初始化的指针,指针指向任意的随机空间,
2.OC中的野指针:一个指针,指向了一个被回收的对象
3.僵尸对象: 是堆区的一个对象,是被操作系统回收的一块空间,不能再通过程序中指向这块空间的指针访问的对象
"僵尸对象和野指针的关系
1)野指针不一定指向僵尸对象,因为C中有野指针的概念,但没有对象的概念
2)OC中指向一个僵尸对象的指针,叫做野指针

#program mark - MRC中 retain 与 assign
1.到底什么是retain,什么是assign
当对于一个属性我们不需要生成一个内存管理的set方法的时候,我们就用assign来修饰这个属性
当对于一个属性我们需要生成一个内存管理的set方法的时候,我们就用retain来修饰这个属性

#program mark -@class
"强调
1.两个类A和类B,如果后文件互相#import,编译和运行都没有问题
2.一旦A中有B这个属性,B中有A属性,编译马上报错
3.解决:一端用#import引用,另一端用@class
"问题
@class和#import的区别
#import是预处理指令,在程序编译之前执行,是防止了重复包含
@class不是预处理指令,是关键字,在代码编译的过程中告诉编译器,这是一个类

#program mark - MRC 机制下循环引用/循环retain
"什么是循环retain
在MRC下,两个对象互相拥有对方作为属性,互相给对方赋值,此时会导致程序结束之前两个对象都无法释放
"如何解决
一端用retain,另一端用assign,可以迫使一个对象先调用dealloc方法,去release另一方,最终两个对象都释放

#program mark - 自动释放池
1.什么是自动释放池?
就是一对花括号包裹的作用域,只不过这个作用域用了@autoreleasepool这个关键字进行了修饰
2.和普通作用域的区别
可以在自动释放池结束的时候,对于在作用域中调用了autoreleasepool放法的对象做一次release
3.有什么用?
防止创建对象(alloc/new),忘记调用release
"强调
1.需要自动释放池协助release的对象,不一定就是在自动释放池中创建,只要这个对象在自动释放池中调用了autorelease方法
2.自动释放池可以嵌套

#program mark - ARC机制的概述
"强指针与弱指针
在ARC中,对于一个修饰OC对象的指针
如果用__strong修饰,叫做强指针,指针前面什么都不加默认就是强指针
如果用__weak修饰,叫做弱指针
"ARC的核心机制
1.对象内存管理的代码编译器完成(ARC下不可以写 release retain retainCount
                 [super dalloc])
2.对象是否释放,就这这个对象有没有强指针指向,如果有,就不释放,如果没有,就"立即"释放

#program mark - @property参数strong与weak
"强调
在ARC下用@property声明属性,如果是OC对象就用strong,如果是非OC对象,就用assign

#program mark - ARC 机制下 循环引用
1.是什么?
在ARC下对象A中有对象B作为属性,对象B中有对象A作为属性,如果两边都用strong修饰且相互赋值,会导致程序结束之前两个对象都无法释放
2.怎么解决
一端用strong,一端用weak
原理:强迫对象没有强指针指向,先释放,导致另外一个对象也没有强指针指向,最终两个对象都释放

#program mark - 弱指针在对象被回收后自动设置为nil
"强调
1.什么是弱指针?
在ARC下.被__weak修饰的,指向一个OC对象的指针.

2.弱指针的特点:当弱指针指向的对象被释放之后,弱指针"自动"被赋值为nil,此时不会出现野指针问题

0 个回复

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