引用计数
引用计数增加
+ alloc 开辟内存 引用计数从 0 到 1
- retain 不管原来内存使多少 加 1
- copy 1.原来的不变 2.新开辟内存 从 0 到 1
- release 原来的基础上 减 1 release(释放)
-autorelease 自动释放
7.0之后 新建的工程默认都是arc的。
Student * stu = [[Student alloc] init];
打印当前对象的引用计数 试用 - retainCount 方法
NSLog(@"当前的引用计数:%lu",[stu retainCount]);
[stu retain]; //对当前的对象的引用计数 加 1
NSLog(@"当前的引用计数:%lu",[stu retainCount]);
[stu copy];
[stu release]; 使当前对象的引用计数 减 1
NSLog(@"当前的引用计数:%lu",[stu retainCount]);
reason:' - [Student copyWithZone:]:unrecognized selector sent to instance 0x100201c40' 错误原因: 对象调用错了方法
[stu autorelease]; //当前不 减 1 在未来某个地方引用计数 减 1
NSLog(@"当前的引用计数:%lu",[stu retainCount]);
内存管理
1.内存的所有权
只有对内存又所有权的对象 才能够release 改变引用计数
alloc retain copy 都能使对象获得内存的所有权
release autorelease 都能使对象放弃内存的所有权
2.又创建就有回首 有 加 1 就有 减 1
3.引用计数的概念
4.在一个方法/类 中 内存的引用计数要保持平衡
5.dealloc方法 在对象的引用计数为0时 系统强制调用 用于回收内存.
6.属性的内存管理 对象类型的属性 需要在dealloc中释放一次
7.自动释放池 负责释放池子范围内所有被标记为autorelease的对象 @autoreleasepool {}
如果是NSAutoreleasePool 对象创建的池子 使用drain 可以清空池子李的所有对象
8.构造器的内存管理
在返回这个对象的时候 使用autorelease
.m
dealloc 内部实现
- (void)dealloc
{
NSLog(@"租车行奉命回收车");
// 一个类的dealloc方法 需要调用父类的delloc
// 所有代码都要写在[super dealloc]之前
//永远不要手动调用它
[super dealloc];
}
引用计数增加
+ alloc 开辟内存 引用计数从 0 到 1
- retain 不管原来内存使多少 加 1
- copy 1.原来的不变 2.新开辟内存 从 0 到 1
- release 原来的基础上 减 1 release(释放)
-autorelease 自动释放
7.0之后 新建的工程默认都是arc的。
Student * stu = [[Student alloc] init];
打印当前对象的引用计数 试用 - retainCount 方法
NSLog(@"当前的引用计数:%lu",[stu retainCount]);
[stu retain]; //对当前的对象的引用计数 加 1
NSLog(@"当前的引用计数:%lu",[stu retainCount]);
[stu copy];
[stu release]; 使当前对象的引用计数 减 1
NSLog(@"当前的引用计数:%lu",[stu retainCount]);
reason:' - [Student copyWithZone:]:unrecognized selector sent to instance 0x100201c40' 错误原因: 对象调用错了方法
[stu autorelease]; //当前不 减 1 在未来某个地方引用计数 减 1
NSLog(@"当前的引用计数:%lu",[stu retainCount]);
内存管理
1.内存的所有权
只有对内存又所有权的对象 才能够release 改变引用计数
alloc retain copy 都能使对象获得内存的所有权
release autorelease 都能使对象放弃内存的所有权
2.又创建就有回首 有 加 1 就有 减 1
3.引用计数的概念
4.在一个方法/类 中 内存的引用计数要保持平衡
5.dealloc方法 在对象的引用计数为0时 系统强制调用 用于回收内存.
6.属性的内存管理 对象类型的属性 需要在dealloc中释放一次
7.自动释放池 负责释放池子范围内所有被标记为autorelease的对象 @autoreleasepool {}
如果是NSAutoreleasePool 对象创建的池子 使用drain 可以清空池子李的所有对象
8.构造器的内存管理
在返回这个对象的时候 使用autorelease
.m
dealloc 内部实现
- (void)dealloc
{
NSLog(@"租车行奉命回收车");
// 一个类的dealloc方法 需要调用父类的delloc
// 所有代码都要写在[super dealloc]之前
//永远不要手动调用它
[super dealloc];
}