iOS中创建对象的步骤:

  1,分配内存空间,存储对象
  2,初始化成员变量
  3,返回对象的指针地址

第一:非ARC机制:

1,对象在创建完成的同时,内部会自动创建一个引用计数器,是系统用来判断是否回收对象的唯一标示,当我们的应用计数retainCount = 0的时候,系统会回收当前对象
2,[对象 release] retainCount - 1;
3,[对象 retain] retailCount + 1;
4,当应用计数retailCount = 0的对象就会被销毁;

5,dealloc函数,当一个对象销毁的时候,系统会自动调用dealloc函数,通知对象将要被销毁

内存管理原则(配对原则):只要出现了new,alloc,retaim,就一定配对出现一个release,autorelease

  注:EXC_BAD_ACCESS 访问了不可访问的内存空间
  被系统回收的对象,称为僵尸对象
  默认情况下,xcode为了提高编码效率,不会时时检查僵尸对象

手动内存研究问题包括:
  1,野指针操作
  2,内存泄露:不再使用的对象,一直在内存中没有被销毁

//面试笔试,出题率非常高

- (void)setCar:(Car *)car
{if (_car != car){ //relese旧值[_car release];//[nil release];//retain新值_car = [car retain];}
}
- (Car *)car
{return _car;
}
- (void)dealloc
{//目的是要保证在p对象存在的时候,car对象一定存在[_car release];[super dealloc];NSLog(@"Person 被销毁了");
}

第二:ARC机制

研究ARC机制,就必须清楚@property的作用:

  1.生产get与set方法的声明
  2.生成get与set方法的简单实现
  3.若果你没有声成名相对象的成员变量,那么他会自动生成一个_开头的成员变量

@property 参数分为4类

1.与set方法内存管理相关参数
  retain: 要生成符合内存管理原则的set方法(应用与对象类型)
  assign: 直接赋值,(对象类型,基本数据类型),简单的
  copy :

2.多线程相关

    nonatomic: 不生成多线程线管代码,使用这个就可以了(效率高一点)
  atomic:生成多线程线管代码(不写默认是这种方式)
  实际开发中,只要是对象类型的@property都写成下面

3.是否要生成set与get方法
  readwrite: 可读可写属性,同时生成set与get方法
  readonly : 只读属性,只生成get方法

4.set与get方法名称相关的参数
  setter:设置生成的set方法名称
  getter:设置生成的get方法名称

例如:

@property (nonatomic,retain) Car * car;

@property (nonatomic,retain)NSString * name;
@property (nonatomic,assign)int age; //int float double char
@property (nonatomic,assign)int weight;
@property (nonatomic,assign,readonly)int idCard;
//改变set与get方法名称很多都是用在BOOL类型的变量
@property (nonatomic,assign,setter = isDeid:,getter = isDeid)BOOL isDeid;

转载于:https://www.cnblogs.com/fengtengfei/p/4306276.html

【iOS系列】-iOS中内存管理相关推荐

  1. IOS开发系列—Objective-C之内存管理

    概述 我们知道在程序运行过程中要创建大量的对象,和其他高级语言类似,在ObjC中对象时存储在堆中的,系统并不会自动释放堆中的内存(注意基本类型是由系统自己管理的,放在栈上).如果一个对象创建并使用后没 ...

  2. 理解 iOS 和 macOS 的内存管理

    在 iOS 和 macOS 应用的开发中,无论是使用 Objective-C 还是使用 swift 都是通过引用计数策略来进行内存管理的,但是在日常开发中80%(这里,我瞎说的,8020 原则嘛?)以 ...

  3. 关于IOS的多任务以及内存管理

    看了很多FY为自己的可用内存是350MB还是380MB纠结.为了多优化出一点可用内存费脑筋.  IOS的任务管理和内存管理,跟windows是有很大差别的.很多FY习惯于用 windows的思维去看待 ...

  4. Python中内存管理的问题

    Python中内存管理的问题 pyqtgraph实时显示占用内存 删除变量释放内存 后记 我的环境是python3+SublimeText.python是解释型语言,平常对内存关注得不多. pyqtg ...

  5. Linux中内存管理详解

    Linux中内存管理 内存管理的主要工作就是对物理内存进行组织,然后对物理内存的分配和回收.但是Linux引入了虚拟地址的概念. 虚拟地址的作用 如果用户进程直接操作物理地址会有以下的坏处: 1. 用 ...

  6. Linux内核中内存管理相关配置项的详细解析3

    接前一篇文章:Linux内核中内存管理相关配置项的详细解析2 5. 2:1 compression allocator (zbud) 对应配置变量为:CONFIG_ZBUD. 此项默认为选中(如果前一 ...

  7. iOS中内存管理方案

    系统提供的有不同的内存管理方案,大致有如下三种: TaggedPointer (对于一些小对象,比如说NSNumber,NSString等采用此种方案) NONPOINTER_ISA (64位架构下i ...

  8. IOS面试_1.浅析内存管理

    为了开学的面试,就在博客里总结一下面试会问到的问题,今天就来谈谈内存管理,看到一篇文章非常不错,http://vinceyuan.cnblogs.com/,深入浅出,推荐大家去看看! Objectiv ...

  9. iOS 下ARC的内存管理机制

    本文来源于我个人的ARC学习笔记,旨在通过简明扼要的方式总结出iOS开发中ARC(Automatic Reference Counting,自动引用计数)内存管理技术的要点,所以不会涉及全部细节.这篇 ...

最新文章

  1. LibreOffice 支持无障碍辅助的 5 种方式
  2. 服务器负载均衡的部署方式
  3. 熊市利好,Bit-Z推出币圈最高返佣50%
  4. JavaScript debugger time out and defer.resolve
  5. 【Java】 剑指offer(67) 把字符串转换成整数
  6. 学习过程中的一些想法
  7. BestCoder Round #33
  8. 关于auto-keras训练cnn模型
  9. 解决Cell重用问题
  10. 检测同心圆_两“心”携手,共抗心衰——“同心圆”心衰俱乐部走进临安图书馆~...
  11. 网吧相关法律期待完善
  12. word文本框中插入文本框_如何在Word中打印隐藏的文本
  13. 【Python入门】Turtle海龟库:利用海龟画笔交互绘制字符旋涡
  14. 生成订单:三个表(Products,Orders,OrderItem)
  15. 用智能硬件“折叠时间”,外卖商家正在触摸的数字化未来
  16. R语言绘制Kaplan-Meier生存曲线
  17. 华为天猫官方旗舰店粉丝突破一千万
  18. Photoshop教程8000例。平时想做的各种效果完整郎阔!
  19. 2021最新 RocketMQ面试题精选(附刷题小程序)
  20. Element UI是什么?基本用法

热门文章

  1. Exchange Server 2016管理系列课件17.创建和使用会议室邮箱
  2. Chrome图标的来历。
  3. eclipse jad
  4. PowerShell 开启无线热点
  5. 常用SQL语句优化技巧
  6. QTP自动例子的源码分析--ClearMainWindow
  7. 操作 Wave 文件(3): 接触 mmio 系列函数
  8. 如何导入asl文件?ps制作知识
  9. ARCGIS 拓扑规则阐述
  10. linux下的定时任务和延迟任务