小白学开发(iOS)OC_手动内存管理(2015-08-02)
来源:互联网 发布:郭德纲相声知乎 编辑:程序博客网 时间:2024/05/18 15:30
//
// 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
// 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
0 0
- 小白学开发(iOS)OC_手动内存管理(2015-08-02)
- 小白学开发(iOS)OC_ 手动内存管理类的相互引用问题(2015-08-05)
- 小白学开发(iOS)OC_ 单个对象的内存管理(2015-08-02)
- 小白学开发(iOS)OC_多个对象的内存管理(2015-08-03)
- 小白学开发(iOS)OC_ set方法的内存管理分析(2015-08-04)
- 小白学开发(iOS)OC_继承(2015-07-26)
- 小白学开发(iOS)OC_多态(2015-07-27)
- 小白学开发(iOS)OC_ block数据类型(2015-08-08)
- 小白学开发(iOS)OC_ @property 参数(2015-08-05)
- 小白学开发(iOS)OC_ 使用继承来扩充类(2015-08-07)
- 小白学开发(iOS)OC_ protocol(协议) (2015-08-09)
- 小白学开发(iOS)OC_ SEL数据类型(2015-08-10)
- 小白学开发(iOS)OC_ Foundation之NSString类(2015-08-11)
- 小白学开发(iOS)OC_ 字符串的获取 (2015-08-11)
- 小白学开发(iOS)OC_ 字符串的比较判断(2015-08-12)
- 小白学开发(iOS)OC_基本数据类型转换成字符串(2015-08-12)
- 小白学开发(iOS)OC_ 字符串重组(2015-08-13)
- 小白学开发(iOS)OC_ 字符串写入文件(2015-08-13)
- contiki中的图形库部份ctk最小系统
- 分解质因子和快速幂在求组合数的模中的应用
- 一起学CC3200系列教程之文件操作
- 我是如何自学Android,资料分享
- RASP解决方案包括开源方案
- 小白学开发(iOS)OC_手动内存管理(2015-08-02)
- 【暑期基础2】C HDU 2028 Lowest Common Multiple Plus
- 仿易讯客户端loading效果
- haproxy redirect 重定向
- acmoj - 数蘑菇线段树区间更新
- 【USACO OPEN 10】hop
- chrome中iframe交互问题
- Mahout推荐系统引擎UserCF中的IRStats部分源码解析
- struts2二次上传图片缓存问题