OC17内存管理和自动引用计数

//
//  ViewController.m
//  OC17内存管理和自动引用计数
//
//  Created by Zoujie on 15/10/25.
//  Copyright ? 2015年 Zoujie. All rights reserved.
//

#import "ViewController.h"
#import "Fraction.h"
@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
#pragma mark 内存管理的基本知识
//应用没有足够的内存去坐更多地事情,就有崩溃的可能。内存管理关心的是清理(回收)不用的内存,以便内存能够再次利用。
//    1.释放不在使用对象的内存
//    2.确定对象不在需要使用
//    3.引用计数(手动,用于支持遗留的非ARC工程)
    [self managerMemoryByMyself];
//    4.Xcode4.2以后  ARC 自动引用计数
    [self autoARC];
    
    
}

-(void)managerMemoryByMyself
{
//    当创建对象时,初始的引用计数为1
//    每当创建引用到对象需要为引用对象+1  ,发送retain消息
    id obj,obj1;
//    [obj retain];

//    当不需要对象时,通过给对象发送release消息 ,为引用计数减1
//    [obj release];
    
//    当引用计数为0的时候,系统就知道这个对象不在需要使用了
    
//    add方法 会增加引用计数
    [obj addObject:obj1];
    [obj addSubview:obj1];
    
//    remove会减少对象引用计数
    [obj removeObjectAtIndex:0];
    [obj removeFromSuperview];
    
    
//    NSAutoreleasePool 自动释放池可以帮助追踪需要延迟一些时间释放的对象,通过给自动释放池发送drain消息,自动释放池会被清理,对象会被释放
//    [obj1 autorelease];
    
    Fraction *frac1 = [[Fraction alloc]init];
    Fraction *frac2 = [[Fraction alloc]init];
    
//    [frac1 release];
//    [frac2 release];
    
    
    
}

-(void)autoARC
{

}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

@end
时间: 2024-08-10 15:00:56

OC17内存管理和自动引用计数的相关文章

OC基础15:内存管理和自动引用计数

1.什么是ARC? (1).ARC全名为Automatic Reference Counting,即是自动引用计数,会自动统计内存中对象的引用数,并在适当时候自动释放对象: (2).在工程中使用ARC非常简单:只需要像往常那样编写代码,只不过永远不用写retain. release和autorelease三个关键字: (3).在使用ARC之前,需要手动管理内存计数,这种机制称为MRC,即是手动引用计数 (Manual Referecen Counting): (4).ARC是Objective-

swift内存管理中的引用计数

在swift中,每一个对象都有生命周期,当生命周期结束会调用deinit()函数进行释放内存空间. 观察这一段代码: class Person{ var name: String var pet: Pet? init(name: String){ self.name = name print("Person", name, "is initialized") } init(name: String, petName: String){ self.name = nam

第九讲.内存管理初级.(内存管理的方式,引用计数机制及影响计数的各个方法,dealloc方法,内存管理的基本原则,掌握copy的实现)

一.内存管理的方式. 1.进行内存管理的原因: 1>.由于移动设备的内存极其有限,所以每个APP所占的内存也是有限制的,当app所占用的内存较多时,系统就会发出内存警告,这时需要回收一些不需要再继续使用的内存空间,比如回收一些不再使用的对象和变量等. 管理范围:任何继承NSObject的对象,对其他的基本数据类型无效. 2>.本质原因是因为对象和其他数据类型在系统中的存储空间不一样,其它局部变量主要存放于栈中,而对象存储于堆中,当代码块结束时这个代码块中涉及的所有局部变量会被回收,指向对象的指

cocos2dx中的内存管理机制及引用计数

1.内存管理的两大策略: 谁申请,谁释放原则(类似于,谁污染了内存,最后由谁来清理内存)--------->适用于过程性函数 引用计数原则(创建时,引用数为1,每引用一次,计数加1,调用结束时,引用计数减1,当引用计数为0时,才会真正释放内存) --------->适用于注册性函数(消息处理,中断等场合) 2.cocos2dx中的内存管理采用引用计数和内存托管的原则 spr->retainCount();//获取对象的引用计数值 spr->retain();//引用计数加1 spr

OC中内存管理问题之引用计数

定义一个Person类 其实引用计数这个问题大家可以理解为租房子的问题, 如果有retain alloc 代表这个人租了这间大房子, 拿到了一把钥匙, 引用计数代表房子一共有的钥匙的数量, release代表退房归还钥匙 Person * p = [[Person alloc] init];//房东盖好了一间房子, 现在是房东一个人 //alloc 开辟空间,引用计数由0变为1 //retainCount,用于查看对象的引用计数 NSLog(@"%lu", [p retainCount

OC中的自动引用计数

目录: 1,自动引用计数的定义 2,强引用和弱引用 3,类比手动引用 4,循环引用 5,CoreFoundation 内容: 自动引用计数的定义: (Automatic Reference Counting) 在编译时自动在合适的位置加入retain 和 release,简化内存管理,自动引用计数不是内存管理,而是通过强引用(__strong)和弱引用(__weak)指针来标记内存的管理方式,当指向对象的强引用指针数等于0时,内存才会释放. 强引用和弱引用: __strong, 当我创建一个oc

ARC自动引用计数

启动自动引用计数选项. 选择项目的属性文件 --> 搜索 automatic Reference --> Objective-C Automatic Reference Counting --> Yes ARC 和手动管理内存的区别. ARC 并不是GC在运行中判断引用计数是否为0,从而清除内存.而是在代码编译之前通过静态分析工具Analyze自动生成内存管理代码. 开启ARC后,不能再使用retain等系列手动内存管的方法,可以重写dealloc方法但不能再方法中[super deal

objective-c启用ARC时的内存管理 (循环引用)

PDF版下载:http://download.csdn.net/detail/cuibo1123/7443125          在Objective-C中,内存的引用计数一直是一个让人比较头疼的问题.尤其是当引用计数涉及到arc.blocks等等的时候.似乎ARC的出现只是让我们解放了双手,由于底层实现依然依赖引用计数,所以开启ARC后,只有对引用计数机制更加了解,才能避免Cycle Retain.Crash等问题的出现. 但是由于使用ARC可以显著提高编码效率,所以建议尽量启用arc,本文

Objective-C----MRC内存管理 、 自动释放池 、 面向对象三大特性及封装 、 继承 、 组合与聚合

1 MRC练习 1.1 问题 引用计数是Objective-C语言采用的一种内存管理技术,当一个对象被创建在堆上后,该对象的引用计数就自动设置为1,如果在其它对象中的对象成员需要持有这个对象时,则该对象的引用计数被加上1,此时如果该对象被释放,内存管理程序将首先把该对象的引用计数减1,然后判断该对象的引用计数是否为0,由于其它对象在持有该对象时将引用计数加了1,所以此时该对象的引用计数减1后不为0,则内存管理程序将不会释放该对象.直到持有该对象的其它对象也被释放时,该对象的引用计数再次减1,变为