//
// main.m
// 手动内存管理
//
// Created by admin on 15/8/3.
// Copyright (c) 2015年 admin. All rights reserved.
//
#import <Foundation/Foundation.h>
#import "Person.h"
int main(int argc, const char * argv[]) {
/*
当我们创建一个对象时:
1. 分配内存空间,存储对象
2. 初始化成员变量
3. 返回对象的指针地址
1. 对象在完成创建的同时,内部会自动创建一个引用计数器retainCount,这个计数器是系统用来判断对象时候回收的唯一依据,当对象的引用计数器ratainCount = 0时,系统会立刻回收当前对象,事实上retainCount是每个对象的一个属性,可以调用
2. [对象 release] 作用是:retainCount - 1
3. [对象 retain] 作用是:ratainCount + 1
4. 当对象的retainCount = 0 的时候,对象就被回收销毁了
5. 当一个对象要被销毁的时候,系统会自动调用dealloc函数,用来通知对象将被销毁了,这个函数只要作用是让程序员知道那个对象已经被销毁了,是NSObject的函数,可以重写来显示那个对象被回收
6. 手动内存管理原则(配对原则):只要出现了new、alloc、retain,就一定要出现一个release或autorelease
注 7. 手动内存管理主要研究两个方面的问题:
① 野指针操作
② 内存泄露
*/
// 这里首先练习一下重写dealloc函数
Person *p = [[Person alloc]init]; //retainCount = 1;
NSLog(@"%lu",p.retainCount);
[p retain]; // retainCount = 2;
NSLog(@"%lu",p.retainCount);
[p release]; // retainCount = 1
NSLog(@"%lu",p.retainCount);
[p release]; // retainCount = 0 被销毁了
// NSLog(@"%lu",p.retainCount); 上一步P这对象已经被销毁了,这里如果再通过这个被销毁的对象调用,就会是野指针,出现错误
return 0;
}
//
// Person.h
// 手动内存管理
//
// Created by admin on 15/8/3.
// Copyright (c) 2015年 admin. All rights reserved.
//
#import <Foundation/Foundation.h>
@interface Person : NSObject
@end
//
// Person.m
// 手动内存管理
//
// Created by admin on 15/8/3.
// Copyright (c) 2015年 admin. All rights reserved.
//
#import "Person.h"
@implementation Person
- (void)dealloc
{
// 在对象自身被销毁之前,一定要先调用[super dealloc]释放父类中的相关对象
[super dealloc];
NSLog(@"Person 被销毁了");
}
@end
版权声明:本文为博主原创文章,未经博主允许不得转载。