一 内存管理

1. set 方法内存管理的相关参数

retain: release旧值,retain新值(值适用于OC对象)

assign:直接赋值(set方法默认,适用于非OC对象类型,即基本数据类型,也包括枚举和结构体)

copy : release 旧值, copy 新值(NSString)

2. 是否生成set方法

readWrite: 读写(同时声明和实现 setter, getter,默认)

readonly:只读(只会生声明和实现getter方法)

3.多线程管理

nonatomic:性能高

atomic:性能低(默认使用这个)

4. setter和getter方法的名称

setter:给set方法改个名字,一定要有冒号( : )

getter: 给get 方法改个名字(BOOL类型用的较多)。

@property [getter=isRich] BOOL rich;

二 模型类

模型就是用来装数据,就是一个存放数据的类,就叫做模型类。

发微博的人: 名字,微博账号,密码,头像,性别, 生日

发的微博: 写微博的人,微博内容, 标题,微博图,转发微博,被评论, 被转发

三 循环引用

循环引用:你引用我,我引用你

1. @class的作用:仅仅告诉编译器有这么一个类,并不知道里面有什么。

@class person 告诉编译器有person这个类,

2.开发中引用一个类的规范。

在.h文件中用@class声明。

在.m文件中用#import来包含类中所有的东西。

3.为什么要用@class?

@class和性能有关,可以循环引用,还可以提高编译效率。

@import作用是拷贝。

4.两端循环应用的解决方案

一端用assign ,另一端用 retain。

四 autorelease基本使用法

1.首先把一个对象发到池子中。

2.当自动释放池被销毁时,会对里面的对象做一次release操作

3.返回对象本身。

4.调用完autorelease后,对象的计数器是不变,不会对它减一。

5.如果调用了两次 autorelease后,会报错,野指针错误。

autorelease的好处

不用再去关心对象的释放时间

不在关心什么时候去调用release.

autorelease使用注意:

占用内存较小的对象不在随便的使用 autorelease.

错误写法:

如果调用了两次autorelease,会报错,野指针。

@autoreleasepool{
//这样写是错误的,在面试中常见
Person *p = [[[[Person alloc]init]autorelease]autorelease];
}

内存管理总结:

1. 计数器的操作

retain   +1

release  -1

retianCount 获得计数器

2. set方法的内存管理

- (void)setCar: (Car *) _car{
if( _car != car){
[_car release];
_car = [car retain];
} }

dealloc 方法的实现

- (void)dealloc(){
[_car release];
[super dealloc];
}

3 @property参数

OC对象类型

非OC对象类型

ARC : ARC是编译器特性。当编译器发现 retian 或者 alloc,自动帮我们插入代码(release)

ARC的判断准则:只要没有强指针指向对象,对象就会被释放。

强指针:默认情况下都是强指针。__strong 是双下划线。

__strong Person *p2 = [[Person alloc]init];

弱指针:__weak

__weak Person *p = [[Person alloc]init];
NSLog(@"%@" , p); //错误的写法

两端循环引用的时候:

ARC:

一端用strong,另一端用weak。

非ARC:

一端用retain,另一端用assign。

参考资料:

http://www.cnblogs.com/silence-wzx/p/5140978.html

http://www.cnblogs.com/wxios/articles/4175468.html

http://www.cnblogs.com/chars/p/5232109.html

IOS基础之 (十一) 内存管理 ARC的更多相关文章

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

    辞职回家打算自学IOS开发,就在借个地方记录一下 Day-1      手动内存管理                   主要内容:release  retain必须配对好,不然会占用内存 慢慢积累导 ...

  2. IOS基础之 (十) 内存管理

    一 基本原理 1.什么是内存管理 移动设备的内存有限,每个app所能占用的内存是有限制的. 当app所占用的内存较多时,系统会发出内存警告,这时得回收一些不需要再使用的内存空间.比如回收一些不需要使用 ...

  3. iOS内存管理 ARC与MRC

    想驾驭一门语言,首先要掌握它的内存管理特性.iOS开发经历了MRC到ARC的过程,下面就记录一下本人对iOS内存管理方面的一些理解. 说到iOS开发,肯定离不开objective-c语言(以下简称OC ...

  4. 包建强的培训课程(12):iOS深入学习(内存管理、Block和GCD等)

    @import url(/css/cuteeditor.css); @import url(http://i.cnblogs.com/Load.ashx?type=style&file=Syn ...

  5. iOS性能优化之内存管理:Analyze、Leaks、Allocations的使用和案例代码

    最近接了个小任务,和公司的iOS小伙伴们分享下instruments的具体使用,于是有了这篇博客...性能优化是一个很大的话题,这里讨论的主要是内存泄露部分. 一. 一些相关概念 很多人应该比较了解这 ...

  6. OC内存管理(ARC)

    1.什么是ARC Automatic Reference Counting,自动引用计数,即ARC,可以说是WWDC2011和iOS5所引入 的最大的变革和最激动人心的变化.ARC是新的LLVM 3. ...

  7. iOS中引用计数内存管理机制分析

    在 iOS 中引用计数是内存的管理方式,虽然在 iOS5 版本中,已经支持了自动引用计数管理模式,但理解它的运行方式有助于我们了解程序的运行原理,有助于 debug 程序. 操作系统的内存管理分成堆和 ...

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

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

  9. OC 内存管理之自动内存管理ARC

    一.基本简介 ARC是自iOS 5之后增加的新特性,完全消除了手动管理内存的烦琐,编译器会自动在适当的地方插入适当的retain.release.autorelease语句.你不再需要担心内存管理,因 ...

随机推荐

  1. js 日期2015/12/22/16/45替换2015-12-22 16:45格式

    js 日期2015/12/22/16/45替换2015-12-22 16:45格式 利用正则分组: function toChange(date) { var reg = /(\d+)\/(\d+)\ ...

  2. openstack中彻底删除计算节点的操作记录

    在使用openstack的过程中,我们经常会添加好几台计算节点来部署虚拟机,在后续使用中由于某些原因,一些计算节点出现了问题,需要将这些出了问题的计算节点从openstack的控制节点中踢出去!但是很 ...

  3. 六、动态增加方法Category

    1.概念:Category可以动态为已经存在的类增加一个方法,可以不改动原有的类. 2. 如何创建一个Category类创建一个文件,选择Objective-C category,点next取名时,要 ...

  4. 如何利用ThoughtWorks.QRCode 生成二维码

    1.引用ThoughtWorks.QRCode.dll 在nuget上查找即可引用,也可自行下载 2.生成二维码静态方法 参数: 二维码内容:fileUrl 二维码图片名:typeName #regi ...

  5. 我所知道的HttpContext.Current

    在MVC中,HttpContext.Current是比较常见的对象,可以用它来进行Session,Cache等的保存等.但是它并不是无处不在的,下面就慢慢来揭开它的面纱. 当我们向服务端发送请求的时候 ...

  6. 【高清未加密】2015传智播客 最新21期c#asp.net 基础到就业班视频和源码

    [.NET]传智播客第[21]期就业班视频(高清无加密)本套2015年21期传智播客C#ASP.NET win10通用mvc+app开发视频教程附源码,是一套非常不错的asp.net自学视频教程,传智 ...

  7. Opencv step by step - 鼠标事件

    鼠标事件有下面几种(没有滚轮事件,比较遗憾): #define CV_EVENT_MOUSEMOVE 0 滑动 #define CV_EVENT_LBUTTONDOWN 1 左键点击 #define ...

  8. 学习Java第一卷--态度的转变

    你对自己的未来有什么规划?做了哪些准备? 认真学习,修身养性,做自己感兴趣的,在大学一定学好Java,将自己的专业学好学精. 我觉得未来十几年或几十年是自己无法完全控制的,只有自己朝着自己心中的目标努 ...

  9. Android开发者资源大汇总

    本文总结了最新的Android开发资源.下面列出的资源都是常用的,每个Android程序员都应该知道,能大大方便App开发.Enjoy~ 来源:Android开发周刊 中文的Android开发信息,资 ...

  10. Unity Networking API文档翻译(一):Networking概述

    写在翻译前的话:      我使用过Photon,研究过Ulink这些Unity提供的多人在线游戏服务器组件,这些商业组件虽然很好很强大.但是对于一个独立开发者来说,4000多软妹币还是点多.总想找一 ...