随笔分类 - 内存管理
摘要:此步骤也可用户内存分配、内存泄漏的检测 最新操作步骤参考: https://www.jianshu.com/p/e499ce63ed72
阅读全文
摘要:一、ARC基本简介ARC:Automatic Reference Counting 自动引用完全消除了手动管理内存的烦琐,编译器会自动在适当的地方插入适当的retain、release、autorelease语句。开发者不再需要担心内存管理,因为编译器已经处理了一切ARC是自iOS 5之后增加的新特性:ARC 是编译器特性,而不是 iOS 运行时特性,它也不是类似于其它语言中的垃圾收集器比如,Java中的垃圾回收是在运行时自动检测对象有没有用如果没用则进行回收ARC和手动内存管理性能是一样的,有时还能更加快速,因为编译器还可以执行某些优化Xcode5之后新建程序默认遵循ARC机制二、ARC基本
阅读全文
摘要:设计简单的微博模型:用User类和Status类来模拟实现在非ARC机制下有两种方式,两者没有太大的区别之所以写了两种只是为了方便学习和对比两种写法! 第一种:没有使用atuorelease和自动释放池代码容易理解,但是开发中一般不这么写:/****************************** User.h文件 **************************************//* 设计微博用户模型: 姓名、微博号码、密码、头像、性别、手机、生日 */#import // 枚举和结构体不用关心内存问题typedef enum { SexMan, // 男...
阅读全文
摘要:autorelase:可以将对象交给自动释放池中,释放池销毁的时候对里面的对象做一次release操作代码如下 @autoreleasepool { Person *person = [[[Person alloc] init] autorelease]; }上面代码虽然正确,但是为了简化代码在开发中一般是提供一个类方法来专门创建对象,并且将管理内存的代码封装到类方法中:注意:定义方法名的时候以类名开头,返回类型为instancetype,而且在创建对象的时候使用self关键字/******************************** Person.h文件 *...
阅读全文
摘要:1.autorelease 基本用法对象执行autorelease方法时会将对象添加到自动释放池中当自动释放池销毁时自动释放池中所有对象作release操作对象执行autorelease方法后自身引用计数器不会改变,而且会返回对象本身2.autorelease 的优点autorelease实际上只是把对release的调用延迟了,对于每一次autorelease系统只是把该对象放入了当前的autorelease pool中,当该pool被释放时,该pool中的所有对象会被调用Release因为只有在自动释放池销毁的时候它里面的对象才销毁,因此不用关心对象销毁的时间也就不用关心什么时候调用rel
阅读全文
摘要:1.@class使用场景:对于循环依赖关系来说,比方A类引用B类,同时B类也引用A类; 可以看出Person和Card互相引用,此时如果使用#import编译报错!因此当使用@class在两个类中相互声明,编译不会报错!用法:使用 @class 类名; 就可以引用一个类,说明一下它是一个类@class和#import的区别:#import方式会包含被引用类的所有信息,包括被引用类的变量和方法;@class方式只是告诉编译器在A.h文件中 B *b 只是类的声明,具体这个类里有什么信息,这里不需要知道,等实现文件中真正要用到时,才会真正去查看B类中信息如果有上百个头文件都#import了同一个.
阅读全文
摘要:iOS 基本内存管理-多对象内存管理(2)中可以看到涉及到对象的引用都要手动管理内存:每个对象都需要写如下代码// 1.对要传入的"新车"对象car和目前Person类对象所拥有的"旧车"_car进行判读- (void)setCar:(Car *)car{ if (_car != car ) { [_car release]; // 释放旧车 _car = [car retain]; // 新车引用计数加一 }}// 2.Person类在回收的时候也必须将它所拥有的车对象回收- (void)dealloc{ // Person对象被回收 那么将Per..
阅读全文
摘要:/* 多对象内存管理: 以人拥有车为例涉及到@property底层set方法管理内存的实现 注意:人在换车的时候要进行当前传入的车和人所拥有的车进行判断 *//********************************* Person.h文件 *********************************/#import #import "Car.h"@interface Person : NSObject{ Car *_car;}- (void)setCar:(Car *)car;- (Car *)car;@end/***********************
阅读全文
摘要:单个对象的内存管理非常简单无非就是alloc对应release,retain对应release。但是如果涉及到很多对象,而且对象与对象有联系的时候该怎么去管理对象的内存呢。比如同样一本书有好3个人购买,那意味着3个人都在引用这本书。在内存中如图所示:那么如果Person对象引用Book对象的话就必须给Book对象的引用计数+1,如果不再引用Book对象就要把Book对象中的引用计数减1。遵循"有加必有减"1.多对象内存管理原则分析只要还有人在使用某个对象,那么这个对象就不会被回收只要你想用这个对象,就让对象的计数器+1当你不再使用这个对象时,就让对象的计数器-1只要有人在使
阅读全文
摘要:1.什么是内存管理移动设备的内存极其有限,每个app所能占用的内存是有限制的当app所占用的内存较多时,系统会发出内存警告,这时得回收一些不需要再使用的内存空间。比如回收一些不需要使用的对象、变量等管理范围:任何继承了NSObject的对象需要去管理内存,但是对于对其他基本数据类型(int、char、float、double、struct、enum等)结构,枚举等不用去关心内存- (void)test{ int a = 20; int b = 10; Person *person = [[Person alloc] init]; // 方法未退出之...
阅读全文

浙公网安备 33010602011771号