OC加强day02

@class关键字
- 两个类A和B, 如果互相#import对方头文件,会造成死循环
- 解决方式
- 在其中的一方,不要用#import

#import "B.h"
@interface A : NSObject@end//#import "A.h"@class A;//告诉编译器 有名字叫做A这么一个类
@interface B : NSObject@end#import "A.h"
@implementation B
{}
  • #import和@class的区别

    • 归属的类型不同

      • #import是预处理指令在编译之前就进行内容转换
      • @class 类名 这是一句OC代码
    • 作用不同
      • #import拷贝 包含在头文件的内容
      • @class 类名 仅仅是告诉编译器这是一个类、

循环retain
- 什么是循环retain
- A类中有一个属性是B类的对象
- B类中有一个属性是A累的对象
- 这时候如果A类中 B类的对象用retain参数
- B类中的A类对象也用retain参数
- 那么就会造成循环retain, 导致内存泄漏
- 解决方法:
- 一段用retain 一段用assign
- **注意: 用assign的那一端 在dealloc中 不需要调用release

自动释放是
- 自动释放池是什么?
用来存放对象的一个池子
存储在自动释放池中的对象,当自动释放出销毁的时候,会向存储池子中的”所有对象”发送一条release消息

  • 如果把一个对象放入自动释放池中?
    只要在自动释放池的范围内 调用对象的autorelease方法,就可以把对象放入池子中了

  • 自动释放池的好处
    唯一好处:可以省略创建对象以后要匹配的那个release代码
    自动释放池的七大注意

  • 只有在自动释放池中 调用了 autorelease方法 才,才是将这个对象存储在了自动释放池中
  • 对象的创建可以在在自动释放池的外面 然后再自动释放池中调用方法,
  • 自动释放池结束的时候 仅仅是为在池子中的对象发送了一条release消息
  • 如果自动释放池中调用了同一个对象多次那么就会在结束的时候多次返回release消息 会出现将是对象错误
  • 如果在释放池中调用了release方法 那么在池子结束后还会调用一次 会出现野指针
  • 将对象存储到自动释放池中 并不会是对象的引用计数器+1
  • 自动释放池也可以嵌套 只有在当前自动释放池结束的时候就会向对象发送release消息

自动释放池的规范
- 如果使用类方法创建一个对象, 要求必须在这个对象在方法中已经被 autorelease过了

ARC机制
- 什么是ARC
- 自动引用计数器
- 编译器会在适当的情况下自动释放对象
- ARC下对象是怎么回收的?
- 本质上:不管在MRC还是ARC 对象的引用计数器的值为0的时候回收
- 表象上
- 一个对象如果没有任何强指针指向的时候他就会被立即回收
- 强指针和弱指针
- 强指针: 用__strong修饰的指针(默认)
- 弱指针: 用__weak就是的指针
- 作用: 用来判断对象是否可以被系统回收

@property参数 strong 和weak
- @property参数strong与weak
- 作用:@property 自动生成的私有属性 到底是强指针 还是 弱指针

  • “@property (strong/weak) NSString * name;

  • strong:生成的私有属性是强指针

  • weak:生成的私有属性是弱指针

  • 在ARC机制下 setter方法的实现 就是直接赋值 不需要做任何事情

  • 在ARC下 不能用retain,因为retain是指生成的setter方法的实现 中 是标准的内存管理代码

  • 一般来说在MRC下用retain参数 —> ARC下就用strong

  • 一般来说在MRC下用assign参数—>ARC下就用assign

ARC机制先得循环引用
- 什么是循环引用
- 当对象A中有对象B作为属性
- 而且 对象B中有对象A作为属性
- 如果这两个属性 都是用__strong修饰那么就会形成循环引用
- 就会导致两个对象都不能回收

2.例题:

    人类Person:{电脑属性;}电脑类Computer:{人属性(拥有者);}

@property 参数总结
- 1.
- atomic <—-> nonatomic
- 这两个参数,无论在MRC还是ARC都可以使用
- 2.
- retain: 只能使用在MRC模式下,在MRC模式先 当属性的类型是OC对象的时候,绝大多数场景下使用
- assign 可以使用在ARC和MRC模式下。
- 在ARC下 : 当属性的类型是非OC对象的时候 一律使用assign
- 在MRC模式下: 当属性循环引用的时候 1边使用assign一遍使用retain
- 3.
- strong:只能使用在ARC模式下,当属性的类型是OC对象的时候 绝大多数场景使用strong
- weak: 只能使用在ARC模式下,当出现循环引用的时候,一遍使用strong一遍使用weak
- 4.
- getter setter 修改方法名字
- 5.
- readonly
- readwrite
- 无论MRC ARC都可以使用

MRC终极写法

 @property(nonatomic,assign(非OC对象)/retain(OC对象))类型 属性名称大部分情况只要有OC对象就用 retain当出现循环retain时候一段就用retain  一段用  assign

ARC终极写法

 @property(nonatomic,assign(非OC对象)/weak/strong)类型 属性名大部分情况只要OC对象就使用strong当出现循环引用的时候 一段 weak 一段strong

@lass关键字 ARC机制相关推荐

  1. 自动释放池 ARC机制

    IOS学习第24天 @class 1.两个类A和B,如果互相#import对方头文件,会造成死循环2.解决方式: 在其中的一方,不要用#import <xxx.h>来引入对方的头文件,用@ ...

  2. ios5 ARC机制介绍和使用

    参考http://www.yifeiyang.net/development-of-the-iphone-simply-1/ http://blog.csdn.net/diyagoanyhacker/ ...

  3. JAVA synchronized关键字锁机制(中)

    synchronized 锁机制简单的用法,高效的执行效率使成为解决线程安全的首选. 下面总结其特性以及使用技巧,加深对其理解. 特性: 1. Java语言的关键字,当它用来修饰一个方法或者一个代码块 ...

  4. 06 - Object-C ARC机制

    2019独角兽企业重金招聘Python工程师标准>>> ##一.简介 ARC是自iOS 5之后增加的新特性,完全消除了手动管理内存的烦琐,编译器会自动在适当的地方插入适当的retai ...

  5. iOS之深入解析内存管理MRC与ARC机制

    一.内存管理 ① 什么是内存管理? 当我们编写程序的时候,会声明各种各样的变量,编写各种各样的代码,它们都会占用内存,但是并不是所有的代码和内存都是由我们进行释放. 内存分为 5 个区域:栈.堆.bs ...

  6. ARC内存管理机制详解

    ARC在OC里面个人感觉又是一个高大上的牛词,在前面Objective-C中的内存管理部分提到了ARC内存管理机制,ARC是Automatic Reference Counting-自动引用计数.有自 ...

  7. 手把手教你ARC——iOS/Mac开发ARC入门和使用

    本文部分实例取自iOS 5 Toturail一书中关于ARC的教程和公开内容,仅用于技术交流和讨论.请不要将本文的部分或全部内容用于商用,谢谢合作. 欢迎转载本文,但是转载请注明本文出处:http:/ ...

  8. ios基础之 ARC

    ios ARC 1 什么是ARC Automatic Reference Counting 自动引用计数 即ARC 顾名思义 系统自动的帮助我们去计算对象的引用计算器的值 可以说是WDC 2011 和 ...

  9. iOS开发ARC入门和使用

    本文部分实例取自iOS 5 Toturail一书中关于ARC的教程和公开内容,仅用于技术交流和讨论.请不要将本文的部分或全部内容用于商用,谢谢合作. 欢迎转载本文,但是转载请注明本文出处:http:/ ...

最新文章

  1. Egret note
  2. Windows 2008远程桌面配置多用户登陆的方法
  3. 深圳敏捷云计算机科技,敏捷云 | 关于我们 | 敏捷云
  4. comparator比较器用法_汽车三元催化器堵塞咋办?不拆不换,用这招清理干净、动力猛如虎...
  5. 自动挂机区块AI机器人源码开源支持二次开发
  6. bug篇——mysql排序混乱问题
  7. android 蓝牙 录音,Android 实现蓝牙录音
  8. BIN、HEX,ELF,AXF文件的区别
  9. RxSwift学习(五)--- RxSwift 操作符
  10. 第七章 Java基础类库
  11. 视频播放--自动播放
  12. 【20考研数学】整体难度如何,有什么特点?
  13. InnoDB内存架构之日志缓冲区
  14. DDR突然初始化失败 Debug记录
  15. 服务器显卡芯片,Intel服务器独立显卡官方美图:单卡四芯原来如此
  16. plc计算机验证方案,基于VB6.0的S7-200 PLC与计算机的 - PLC实验 - 电子发烧友网
  17. Direct3D开发配置指南
  18. 程序员表白专用: 5 种实用表白方法!帮你快速攻陷心仪女生
  19. 2个月就上线的微信小游戏,是如何诞生的?| TAPD经验谈
  20. win10 开始屏幕部分图标不显示解决

热门文章

  1. 视觉惯性里程计 综述 VIO Visual Inertial Odometry msckf ROVIO ssf msf okvis ORB-VINS VINS-Mono gtsam
  2. 全球PML_V2陆地蒸散发与总初级生产力数据
  3. /bin/bash: sshpass: command not found
  4. 55个手机JAVA全屏触屏游戏
  5. 一个下载电子书的网站
  6. PAT : 团体程序设计天梯赛-练习集L1 个人题解
  7. 3分钟画出酷炫动态地图的秘诀!
  8. Java学习笔记7-面向对象(续)
  9. java子承父业(继承,访问权限修饰符,super,重写,final)
  10. Linux--日志分析查看——grep,sed,sort,awk运用