2019独角兽企业重金招聘Python工程师标准>>>

一.复习内存管理中的MRC(手动管理内存)

1.还是遵循谁retain,谁release的原则;

2.遛狗练习的中途换狗问题,在person的.m文件中重写setdog方法

- (void) setDog:(Dog *)dog{

//DogA 计数器 - 1

[_dog release];

//当前溜的DogB

_dog = dog;

//DogB 计数器 + 1

[_dog retain];

}

3.关于retainCount为1,-1,0,无穷大的条件

(1)为1时 是对象计数 当创建对象时或者对象即将释放时为1,即对象计数器最小为1.

(2)为0时 当一个指针的值为空时。

(3)为-1或无穷大时 当一个数据类型被赋值时。

不可变对象通常被称为静态常量,这类对象一般不能用于计数,而可变的对象是可以用来计数的

二.学习了浅拷贝和深拷贝

1.浅拷贝 copy 通常指针对于指针进行拷贝,特点为:通过多个指针指向同一片内存地址。

如  NSString *string = @"123";

NSString *stringI = [string copy];

这时string和stringI输出的内存地址相同

2.深拷贝 mutableCopy 指的是赋值内容并且重新创建一块内存地址

如  NSString *stringII = [string mutableCopy];

这时string和stringII输出的内存地址不相同

三.自动释放池(autorelease)

1.autorelease通常有作用域,当在作用域范围内的创建特定的对象时,出去作用域计数器就会-1

如 @autorelease{

Person *personP = [[Person alloc]autorelease];

//特定的autorelease创建的对象才在出去作用域的时候release 计数器 -1

此时也可以在作用域里面对person retain或release,但是不管怎样,出作用域时计数器只会减y一

}

四.ARC(自动引用计数)

1.ARC会追踪你的对象并决定哪一个仍会使用而哪一个不 会再用到

• 如果启用了ARC,编译器会自动插入retain和release 语句

• 通过Xcode启用或禁用可

2.ARC的特点

(1)不允许调用release,retain,retainCount

(2)允许重写dealloc,但是不允许调用[super dealloc]

(3)@property的参数:

• strong:相当于原来的retain(适用于OC对象),成员变量是强指针

• weak:相当于原来的assign,(适用于OC对象类型),成员变量是弱指针

• assign:适用于非OC对象类型(基础类型)

相互引用时注意的问题:

1.在一方的.h文件中要导入另一方的头文件,另一方的.h文件要引用@class name

如  #import <Foundation/Foundation.h>

#import "MicroBlog.h"

@interface Person : NSObject

#import <Foundation/Foundation.h>

@class Person;

@interface MicroBlog : NSObject

2.一方使用强指针,另一方使用弱指针

3.引用@class的一方若要在.m文件中实现相应的方法,要在.m文件中再次导入另一方的头文件

如  #import "MicroBlog.h"

#import "Person.h"

@implementation MicroBlog

ARC实例:

person.h

#import <Foundation/Foundation.h>

#import "MicroBlog.h"

@interface Person : NSObject

@property (nonatomic ,strong)MicroBlog *microBlog;

@property (nonatomic,strong) NSString *name;

@property (nonatomic,weak) NSString *comment;

-(void)printf;

@end


person.m

#import "Person.h"

@implementation Person

-(void)printf

{

NSLog(@"%@在%@发布了第%i条微博,内容是:%@",_name, [_microBlog time],[_microBlog second],[_microBlog content]);

}

@end


microBlog.h

#import <Foundation/Foundation.h>

@class Person;

@interface MicroBlog : NSObject

@property(nonatomic,weak) Person *person;

@property(nonatomic,weak) Person *commentPerson;

@property(nonatomic,weak) NSString *content;

@property(nonatomic,weak) NSString *time;

@property(nonatomic,assign) int second;

-(void)printComment;

@end


microBlog.m

#import "MicroBlog.h"

#import "Person.h"

@implementation MicroBlog

-(void)printComment

{

NSLog(@"%@评论了你的微博:%@",[_commentPerson name],[_commentPerson comment]);

}

@end


main.m

#import <Foundation/Foundation.h>

#import "MicroBlog.h"

#import "Person.h"

int main(int argc, const char * argv[]) {

Person *person = [[Person alloc]init];

person.name = @"小明";

Person *personI = [[Person alloc]init];

personI.name = @"小花";

personI.comment = @"赞?";

MicroBlog *microBlog = [[MicroBlog alloc]init];

microBlog.content = @"暑假去旅游";

microBlog.second = 2;

NSDate *date = [NSDate date];

NSDateFormatter *dateformatter = [[NSDateFormatter alloc]init];

[dateformatter setDateFormat:@"yyyy-MM-dd HH-mm-ss"];

NSString *nowTime = [dateformatter stringFromDate:date];

microBlog.time = nowTime;

microBlog.commentPerson = personI;

//这是容易忘记的一步,要给person对象设置microBlog

person.microBlog = microBlog;

[person printf];

[microBlog printComment];

return 0;

}

转载于:https://my.oschina.net/u/2483162/blog/519021

【2015-10-19】内存管理---深浅拷贝,autorelease,ARC(自动引用计数)相关推荐

  1. obj-c编程11:内存管理和ARC(自动引用计数)

    乖乖隆地洞,这篇文章内容可是不得了,内存管理哦!首先,这个要是搞不明白,你就等着进程莫名其妙的挂死,或是疯狂申请内存却不释放,结果被OS杀死,不管是"自杀"还是"他杀&q ...

  2. 2015.12.21 内存管理(memory management)

    Memory Management 1.什么是内存管理? 程序在运行过程中管理内存分配的过程,当需要内存的时候就申请一片内存空间,不需要就释放掉. 2.如何去管理内存 站在分配对象拥有权的角度来操作内 ...

  3. 内存管理(二) ARC

    内存管理(二) ARC 上篇我们介绍了MRC,本篇我们介绍下ARC ARC概述 ARC是一种编译器功能,它通过LLVM编译器和Runtime协作来进行自动管理内存.LLVM编译器会在编译时在合适的地方 ...

  4. OC 知识:彻底理解 iOS 内存管理(MRC、ARC)

    1. 什么是内存管理 程序在运行的过程中通常通过以下行为,来增加程序的的内存占用 创建一个OC对象 定义一个变量 调用一个函数或者方法 而一个移动设备的内存是有限的,每个软件所能占用的内存也是有限的 ...

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

    "OC基础"这个分类的文章是我在自学Stephen G.Kochan的<Objective-C程序设计第6版>过程中的笔记. 1.什么是ARC? (1).ARC全名为A ...

  6. js 内存引用计数_快速内存管理–自动引用计数

    js 内存引用计数 In this tutorial, we'll be covering Swift memory management and learn about Automatic Refe ...

  7. iOS 自动引用计数和内存泄露

    自动引用计数与解决内存泄露 自动引用计数主要用于管理和释放内存. 引用计数 我们在创建一个对象的时候,系统会为其分配内存,而什么时候和谁来释放对象内存成了问题,如果不释放,就会导致内存不足.所以苹果公 ...

  8. FreeRTOS源码分析与应用开发10:内存管理

    目录 1. 概述 1.1 RTOS中内存分配特点 1.2 内存堆(heap space)来源 1.2.1 ucHeap数组 1.2.2 链接器设置的堆 1.2.3 多个非连续内存堆 1.3 关于字节对 ...

  9. linux内存管理窥探10,Linux 内存管理窥探(2):内存模型

    讨论内存的模型之前需要先聊一下两种计算机架构:UMA 和 NUMA UMA 称为均匀存储器存取(Uniform-Memory-Access) : 物理存储器被所有处理机均匀共享.所有处理机对所有存储字 ...

最新文章

  1. R19436221 区间第k小 主席树
  2. 无厘头的mysql故障排除
  3. [转载] 让SciTE能够和IDE一样进行成员提示
  4. Substitution控件MethodName无法取到Session的解决办法
  5. 虚拟空间,域名解析,A记录,MX记录,CNAME记录,TTL 等 更多Web服务器相关名词解释
  6. VS2010下配置使用OpenGL的glut库
  7. caffee安装 Windows10+vs2015+python3.7+CPU
  8. 联想G480黑苹果安装成功
  9. 软件质量属性:可用性
  10. HYSBZ 1406 密码箱【数学】
  11. 二元函数可微与切平面存在的关系
  12. 东华大学matlab账号,东华大学银行账号、联行号及税号
  13. 【开发】微信公共帐号机器人WeBot
  14. 前端静态页面——爱心捐赠网站
  15. JAVA实现Tom猫
  16. EF6 T4 Model.TT文件的修改-自动加上注释
  17. 网络图片缩略图查看工具
  18. Python操作 Excel 基础操作
  19. access sql 取余_国家计算机二级ACCESS函数总结
  20. 探索设计之路-Photoshop【移动选框工具】

热门文章

  1. 准备您的虚拟桌面--WinXp模板
  2. ansible register when: result | succeeded when: item.rc != 0
  3. **php队列的实现思路和详细过程
  4. 磁盘阵列RAID的分类有哪些?
  5. python提取部分字符串三参数_Python3字符串
  6. 数据中心网络架构 — 云数据中心网络 — 二层架构设计示例
  7. C 语言面试题 — int i [ 4 ]={ i [ 2 ]=2 }
  8. VMware 虚拟化编程(15) — VMware 虚拟机的恢复方案设计
  9. Git 本地仓库管理
  10. Python基本语法_异常处理详解