小白学开发(iOS)OC_手动内存管理(2015-08-02)

//

//  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

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-12-22 06:33:11

小白学开发(iOS)OC_手动内存管理(2015-08-02)的相关文章

小白学开发(iOS)OC_ 单个对象的内存管理(2015-08-02)

// //  main.m //  单个对象的内存管理 // //  Created by admin on 15/8/3. //  Copyright (c) 2015年 admin. All rights reserved. // #import <Foundation/Foundation.h> #import "Person.h" void test(); void test5(Person * p); int main(int argc, const char *

【iOS开发-33】学习手动内存管理临时抛弃ARC以及retain/assign知识——iOSproject师面试必考内容

我们为什么须要内存管理?当使用内存达到40M和45M时候会发出警告,假设不处理,占用内存达到120M时直接强制关闭程序. 所以出现闪退除了是程序出现逻辑错误,还有可能是内存使用过大. (1)创建一个对象的过程:先分配内存空间存储对象:初始化成员变量:返回对象的指针. (2)对象在创建时,内部会自己主动创建一个引用计数器retainCount,当retainCount=0时,系统会回收当前对象,retainCount是唯一推断标记.release会-1.retain会+1,retain后返回的是自

【iOS开发-33】学习手动内存管理暂时抛弃ARC以及retain/assign知识——iOS工程师面试必考内容

我们为什么需要内存管理?当使用内存达到40M和45M时候会发出警告,如果不处理,占用内存达到120M时直接强制关闭程序.所以出现闪退除了是程序出现逻辑错误,还有可能是内存使用过大. (1)创建一个对象的过程:先分配内存空间存储对象:初始化成员变量:返回对象的指针. (2)对象在创建时,内部会自动创建一个引用计数器retainCount,当retainCount=0时,系统会回收当前对象,retainCount是唯一判断标记.release会-1,retain会+1,retain后返回的是自己se

小白学开发(iOS)OC_ @property 参数(2015-08-05)

// //  Person.h //  手动内存管理 // //  Created by admin on 15/8/5. //  Copyright (c) 2015年 admin. All rights reserved. // #import <Foundation/Foundation.h> #import "Car.h" @interface Person : NSObject /* @property 参数的作用 1. 生成set和get方法的声明 2. 生成s

IOS基础 Day-1手动内存管理

辞职回家打算自学IOS开发,就在借个地方记录一下 Day-1      手动内存管理                   主要内容:release  retain必须配对好,不然会占用内存 慢慢积累导致错误 一旦内存占用超过40m 45m时分别发生警告,一旦超过120m 系统将kill你的app 发生闪退 主要要防止发生的问题: 1.野指针操作 2.内存泄漏 理解retain和assign的区别和 retain的原理 Main 1 // 2 // main.m 3 // 1-1内存管理 4 //

手动内存管理和自动释放池

手动内存管理 在进行内存管理的时候要注意内存管理的准则:谁开辟内存,谁释放内存(谁污染的谁治理) .开辟内存之后,对象的引用计数为1,只有继承自NSObject的对象才有内促管理的概念, 当对象引用计数为0的时候对象的内存会被清理. 下列关键字会开辟内存,对象引用计数器+1 alloc new copy mutableCopy 下列是内存管理的相关方法. retain :保留对象,对象的引用计数器+1. release : 释放对象,对象引用计数器-1. retainCount : 获取对象当前

iOS-旧项目中手动内存管理(MRC)转ARC

在ARC之前,iOS内存管理无论对资深级还是菜鸟级开发者来说都是一件很头疼的事.我参 加过几个使用手动内存管理的项目,印象最深刻的是一个地图类应用,由于应用本身就非常耗内存,当时为了解决内存泄露问题,每周都安排有人值班用 Instruments挨个跑功能,关键是每次都总能检查出来不少.其实不管是菜鸟级还是资深级开发者都避免不了写出内存泄露的代码,规则大家都懂,可是 天知道什么时候手一抖就少写了个release? 好在项目决定转成ARC了,下面将自己转换的过程和中间遇到的问题写出来和大家共享,希望

Objective-C 【内存管理&amp;手动内存管理 综述】

------------------------------------------- 内存管理 (1)Objective-C的内存管理 栈区    存放局部变量(由于基本数据类型占用的存储空间是固定的,由系统去分配,我们不用去管,故栈区存放基本数据类型,) 堆区    存放程序运行过程中动态分配的内存空间(对象类型是程序运行过程中动态分配的,他们的大小不固定.比如说是我们Person new申请来的,存放在堆区,也是我们需要管理的) ★所以内存管理的范围是   继承了NSObject的所有对象

iOS夯实:内存管理

iOS夯实:内存管理 文章转自 内存管理 最近的学习计划是将iOS的机制原理好好重新打磨学习一下,总结和加入自己的思考. 有不正确的地方,多多指正. 目录: 基本信息 旧时代的细节 新时代 基本信息 Objective-C 提供了两种内存管理方式. MRR (manual retain-release) 手动内存管理这是基于reference counting实现的,由NSObject与runtime environment共同工作实现. ARC (Automatic Reference Cou