- (void)dealloc
{
NSLog(@"租车行奉命回收车");
//一个类的dealloc方法,需要调用 父类的dealloc
//所有代码都要卸载 在[super dealloc]之前
//永远不要手动调用它;
[super dealloc];
}
出现的问题1.内存泄漏 2.内存过渡释放
内存管理 : 手动管理(MRC) 自动管理(ARC) --------垃圾回收是给MAC用的
引用计数 是指拥有这块内存的个数 有多少的指针指向该内存
alloc 0->1
-retain +1的意思
-copy(原来的不变 新开辟的内存和以前的一样 然后引用计数0->1 和 alloc差不多)
-release是减少一个引用指向
-autorelease 延迟释放
7.0之后都是新建工程自动默认都是ARC;
在all和combine中更改自动
student * stu = [[student alloc] init];
//打印当前对象的引用计数 使用-retainCount方法
NSLog(@"当前的引用计数%lu",[stu retainCount]);
[stu retain];//对当前对象的引用计数+1;这个指针怎么得到
NSLog(@"当前的引用计数%lu",[stu retainCount]);
[stu retain];//对当前对象的引用计数+1;这个指针怎么得到
NSLog(@"当前的引用计数%lu",[stu retainCount]);
[stu copy];
[stu retain];//对当前对象的引用计数+1;
[stu release];//对当前对象的引用计数-1;
NSLog(@"当前的引用计数%lu",[stu retainCount]);
[stu autorelease];//当前不-1 在未来某个地方引用计数-1;
NSLog(@"当前的引用计数%lu",[stu retainCount]);
----------------------------------
1.对象内存的所有权的指针才能够release改变引用计数;
alloc retain copy 都能使对象获得内存的所有权
release 和 autorelease都能使对象放弃内存的所有权
2.有创建就有回收 有+1就有-1
3.引用计数的概念
4.在一个方法/类中,内存d引用计数要保持平衡。
5.dealloc方法 在对象的引用计数为0时系统强制调用; 用于回收内存
6.属性的内存管理 对象类型的属性,需要在dealloc中释放一次
// 7.自动释放池 负责释放池子范围内所有呗标记为autorelease的对象 @autoreleasepool{}
// 8.构造器的内存管理
// 在返回这个对象的时候,使用autorelease
//1.有创建就必须有释放 !
//! 2.⽤用引⽤用计数 标识 拥有对象有所有权的 拥有者(指针)的个数!
//! 3.使⽤用alloc retain copy 增加引⽤用计数 使⽤用release autorelease减少引⽤用计数!
//! 4.只有拥有对象所有权的拥有者 才能对对象使⽤用内存管理代码!
//! 5.在⼀一个类/⽅方法中,⼀一个对象的引⽤用计数必须保持平衡,有+1就有-1!
//! 6.当⼀一个对象的引⽤用计数被减为0时,系统会⾃自动调⽤用对象的dealloc⽅方法!
//! 7.属性的内存管理: 对象类型的属性,需要在dealloc⼿手动释放⼀一次!
//! 8.自动释放池: autoreleasepool的作⽤用机制:自动释放池负责管理所有在 池⼦子范围内被标 记为autorelease的对象, 并在 自动释放池 结束时对 池⼦子中所有的对象release⼀一次!
//! 9.构造器的内存管理: 因为构造器返回的对象需要被外界使⽤用,所以需要对它进⾏行延迟释 放,即对返回的对象标记autorelease!
//! 10.容器的内存管理 : 容器类 会对所有加入到自身中的对象 retain⼀一次,用来保持对这些 对象的所有权. 当这些对象被移除出容器时,容器会自动放弃对象的所有权,即release⼀一次.