iOS学习第四天杂记--Objective-C中的内存管理

  先说明下,原文为青玉伏案写的。我这只是学习而已。

  OC中的内存管理。

  OC中使用引用计数和垃圾回收来管理内存,在OC中为每个对象分配一个引用计数器,当对象刚刚被创建时其初始值为1,当有某段代码需要访问一个对象时,会将该对象的引用计数器加1(通过retain来实现);当访问一个对象结束时,会将该对象的引用计数器减1(通过release来实现);当计数器为0时,该对象占用的内存空间会被收回。在NSObject类有一个retainCount方法,调用该方法可获取当前对象的引用计数值。

  Tips:测试时如若需要用到retainCount,需要将xcode中的相关设置修改。

将YES改为NO即可。

  

  1. 用可变的数组结合着可变的字符串来观察一下retainCount的变化。

?    ?      ?(1).先创建一个可变数组对象,在创建一个可变字符串对象--此时可变字符串的retainCount为1;

?    ?      ?(2).然后往可变数组里添加可变的字符串,观察可变字符串的retainCount的变化--往可变数组中每加一个对象,数组的retainCount +1

?    ?      ?(3).在可变数组中移除一个str,观察retainCount的变化--可变数组的retainCount -1。

        //用可变的数组来测试内存的访问
        NSMutableArray *array = [NSMutableArray arrayWithCapacity:3];
        //可变的字符串
        NSMutableString *str = [[NSMutableString alloc] initWithString:@"aa"];
        //这时的retainCount
        NSLog(@"新建str时的strRetain = %d",(int)[str retainCount]);
        [array addObject: str];
        [array addObject: str];
        NSLog(@"添加两个str元素后的strRetain = %d", (int)[str retainCount]);

        [array removeObjectAtIndex: 0];
        NSLog(@"移除一个元素后strRetain = %d", (int)[str retainCount]);

?  2.NSString的retainCount的变化

?    ?    ?用NSString声明的字符串变量的retainCount变化由你初始化字符串时的方式决定

?    ?    ?1. 用NSString *str = @"ludashi";定义变量

?    ?    ?    ?用上面的方法定义的字符串是常量字符串,他的retianCount为-1或不定,不会随着retian或者release变化而变化

  

Objective-C中得ARC(Automatic Reference Counting)

?    1.?ARC中应注意的问题:

?    ?    ?(1). 不能显式调用dealloc语句, 或者实现或调用retain, release, retianCount 和 autorelease等方法。

?    ?    ?(2).不能调用@selector (retain) ,@selector (release)等;

?    ?    ?(3).不能使用NSAutoreleasePool对象, 用@autoreleasepool块来代替;

?    ?    ?(4).不能用开头new的名称来定义一个属性,除非你定义一个别的getter名称。

?    ?2.ARC特性

?    ?    ?ARC增加了新的属性定义关键字,strong来代替retain,表示强引用。用weak来代替assign表示弱引用。

时间: 2024-10-03 13:46:36

iOS学习第四天杂记--Objective-C中的内存管理的相关文章

IOS阶段学习第20天笔记(OC中的内存管理)

IOS学习(OC语言)知识点整理 一.OC中的内存管理 1)概念:内存管理的对象为所有继承了NSObject的对象,对基本数据(如:int .float.double...)无效      OC中采用引用计数器对内存做管理,他是一个整数数据,表示对象引用的次数,每个对象分配4字节      的内存空间存放引用计数器.当一个对象的引用计数器为0时 它将被自动释放,反过来说 当使用alloc.      new .copy(mutableCopy)创建新对象时,引用计数器默认为1 2)黄金法则 当使

Objective -C Memory Management 内存管理 第一部分

Objective -C Memory Management??内存管理??第一部分 Memory management is part of a more general problem in programming called resource management. 内存管理是资源管理的一部分. Every computer system has finite resources for your program to use. These include memory, open fi

ios学习第三天杂记

ios学习第三天杂谈,从一个接口文件和实现文件(student.h与student.m)中学习到的.相关文章请参考: OC精选字符串处理方法. 1. 代码规范: 1.1: 类名的首字母要大写 1.2: 方法的命名用驼峰命名法 2. 干货 2.1: 要在一个类中实例化类,需要先引入类的接口文件如***.h. 2.2: OC中类的实例化方式是 Student  *student =  [[Student alloc] init], 可以理解为Student类在NSObject类中继承了alloc方法

IOS学习笔记3—Objective C—简单的内存管理

今天简述一下简单的内存管理,在IOS5.0以后Apple增加了ARC机制(Automatic Reference Counting),给开发人员带来了不少的方便,但是为了能更好的理解IOS内存管理机制,还是需要对其比较了解. 1.在OC中,每个对象都有一个保留计数,创建时每个对象都有一个初始值为1的保留计数,释放时,保留计数都为0 2.创建自动释放的对象 要求以一个方法创建对象时,以自动释放的形式返回该对象是一个很好的编程实践 +(Car *)car { Car *myCar = [[Car a

iOS开发中的内存管理

一.为什么要进行内存管理 系统资源有限,iOS会为每个运行的程序分配30M的内存,超过20M会收到内存警告,超过30M将会终止应用程序.因此,要及时回收一些不需要再继续使用的内存空间,比如回收一些不再使用的对象和变量等,以保证应用程序能正常运行. 二.需要管理的内存 应用程序在运行过程中,会占用一定栈空间和堆空间,也就是说,应用程序运行过程中的数据,有的是放在栈中,有的是放在堆中.栈中的数据由系统维护,无需开发人员来管理,而堆中的数据需要程序员来维护. 堆空间由开发人员请求分配的,比如开发人员发

Objective-C(内存管理)

引用计数器 每个OC对象都有一个占4个字节存储空间的引用计数器 当使用或创建一个对象时,新对象的引用计数器默认是1 retain:可以使引用计数器+1 release:可以是引用计数器-1 retainCount:获得当前的引用计数器的值 当对象被销毁时,会重写dealloc方法 -(void)dealloc { // 这句必须放在最后面 [super dealloc]; } 僵尸对象:所占内存已经被回收的对象,僵尸对象不能再使用 野指针:指向僵尸对象(不可用的内存)的指针 错误:EXC_BAD

iOS中的内存管理精讲

main.m #import <Foundation/Foundation.h> #import "Person.h" #import "Student.h" int main(int argc, const char * argv[]) { @autoreleasepool { // NSString *name = [[NSString alloc] initWithFormat:@"张三"]; // // NSLog(@&quo

ios学习随笔四

Page-Base Application : 作为一个电子书的应用模板 1关于数据源,首先查看到RootViewController的ViewDidLoad方法的一个datasource来源——ModelController 2ModelController方法的初始方法提供了数据的来源和显示内容 Master-Detail Application: 作为一个记事本的应用提供模板 这里有各种的item的添加方法 匹配父级容器: 父级容器说的是视图所在的容器,通过设置上下左右的边距使它适应各种的

ios学习第三天杂记--Objective-c中的集合类

Objective-C中的集合类: 1. 数组 NSArray 在Objective-C中的集合类中主要包括不可变的数组--NSArray, 可变的数组--NSMutableArray, 不可变的字典--NSDictionary, 可变的字典--NSMutableArray, 不可变的集合--NSSet , 可变的集合--NSMutableSet 1>. 不可变的数组 NSArray 数组是有序对象的集合,用来存储对象的有序列表,在OC中数组中必须存的是对象,不能是基本数据类型,若想存入基本数据