oc的MRC和ARC的区别

2023-05-16

#import "ViewController.h"


@interface ViewController ()


@end


@implementation ViewController


- (void)viewDidLoad {

    [super viewDidLoad];

    // Do any additional setup after loading the view, typically from a nib.

    //字面量

    NSString *str = @"doc";

    

    //对象方法


    NSString *str2 = [[NSString alloc] initWithUTF8String:"abc"];

    

    //类方法

    NSString *str3 = [NSString stringWithFormat:@"jack"];


    //区别:通过字面的方式创建出来的对象保存在常量区,通过对象方式和类方法创建出来的对象保存在堆中


    

    //

    //1 内存有系统管理 局部变量保存在栈中,当变量离开了其所在的代码块就会被回收

    

     //堆内存

    //需要程序员自己管理 oc中的对象对象保存在堆中

//    内存管理不当会造成的两个问题

//    1 内存泄漏 不再需要的对象没有释放,导致内存泄漏,内存泄漏会导致应用闪退

//    2 野指针 正在使用的对象被释放了,导致野指针,访问野指针导致程序奔溃

    

    //MRC 手动内存管理

//    1) 引用计数

//      1 每一个对象都有一个引用计数器

//      2 当对象出生的时候引用计数器为1

//      3 当调用对象的retain方法时候计数器+1

//      4 当给对象发送一条release消息的时候,计数器-1

//      5 当一个对象的引用计数为0的时候,这个对象立即被回收

//    (2) 内存管理原则

//         1 谁给一个对象发送 alloc copyratain消息,就必须在适当时候给这个对象发送相应的releaseautorelease消息

//         2 当你需要一个对象的时候就给这个对象的引用器+当你不需要这个对象了,就将该对象引用计数器-1

//    (3) 多个对象内存管理

//        1) setter方法

//            1 当设置新对象的时候需要对新对象做一次retain操作

//            2  当原来的对象不需要了,需要对原来的对象做一次release操作

//            3 如果是同一个对象 12的操作不需要

//           2)

//             1当一个对象即将被销毁的时候会调用这个方法

//             2 在对象消失时,会释放其成员所占用的内存

//             3 在释放内存之前首先要调用[super dealloc]

//           3) 循环引用

//               1  什么是循环引用 (当两个或多个对象引用构成一个封闭的环就是循环引用)

//               2   导致环中的对象都释放不了

    //           3 有一端必须是assign

//          (4) @property的使用

//                1) 内存管理

//                    1 基本数据类型使用assign

//                    2 普通对象一般使用retain

//                    3 NSString block对象使用copy

//                 2)权限控制 readonly 只读仅生成getter方法 readwrite 可读可写生成gettersetter方法

//                 3)线程安全 atomic 线程安全 会给setter方法加锁,访问速度比较慢

//                    nonatomic 非线程安全,不会给setter方法加锁,访问速度比较快

//                  4)方法名称定制 setter 定制setter方法名称

//                           getter定制getter方法名称

//           5)自动释放池 作用 延迟对象的释放 原理 自动释放池栈

//                 使用 当你抵用调用autorealse的时候该对象放到最近的自动释放池中

//                 当执行到自动释放池后面的大括号的时候,自动释放池会出栈,此时该栈中所有的对象做一次release操作

//                 你调用几次autorealse,当自动释放池被销毁的时候会调用几次relase,优点 你不必时刻关注对象的时候,让对象内存管理变的简单 缺点 对象不能及时得到释放,如果对象占用内存很大,它会导致你程序闪退

//   应用场景 当一个对象很小,使用次数很少的时候,可以使用自动释放 快捷构造方法 ,其他需要修奥延迟对象生命周期的地方

    

//    arc 自动引用计数

    

//       1) 什么是自动引用计数 它是编译器特性,不是运行时特性 。编译器会在适当的时候插入内存管理的代码

//       2) 强指针 默认所有的指针都是强指针 ,只要有强指针指向这个对象,这个对象就不会被销毁 ,只要 没有强指针指向这个对象,这个对象立即被销毁 关键字 strong

//    3 弱指针 弱指针不影响对象的销毁 关键字_weak

//    4) 循环引用 当多个对象间的引用形成一个环的时候就是循环引用 环中所有的对象都是方法释放不了 当出现循环引用的时候一端必须是weak

//     5@property 内存管理 assign 都不参与参与内存管理,用于基本数据类型

//          strong 强引用 用于普通对象 copy复制 用于字符串和block

//           weak 弱引用 防止循环引用

//     6  自动释放池 通过类方法创建出来的对象都在离它最近的方法池中

//    当自动释放池销毁的时候才会自动释放池中的对象

}


- (void)didReceiveMemoryWarning {

    [super didReceiveMemoryWarning];

    // Dispose of any resources that can be recreated.

}


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

oc的MRC和ARC的区别 的相关文章

  • Struts2框架自学之路——值栈

    目录 目录Servlet和Action的区别什么是值栈获取值栈对象值栈的内部结构向值栈存放数据 向值栈存放对象向值栈存放List集合 从值栈获取数据 获取字符串获取对象获取List集合其他操作 EL表达式获取值栈数据 Servlet和Act
  • Struts2框架自学之路——拦截器

    目录 目录Struts2拦截器概述重要知识点自定义拦截器 拦截器的结构自定义登录拦截器 创建登录访问的首页登录页面以及登录操作添加登录拦截器功能 Struts2拦截器概述 Struts2框架封装了很多功能 xff0c 而这些功能大多在拦截器
  • Linux简介及系统安装

    目录 目录Linux简介 Linux的应用Linux与Windows的不同字符界面的优势 Linux系统安装 VMware简介虚拟机的新建与设置注意点Linux的系统分区安装Linux系统Linux系统的安装日志 Linux简介 Linux
  • Linux常用命令

    目录 目录命令基本格式文件处理命令 目录或文件处理Linux中常见目录链接命令 搜索命令 文件搜索命令命令搜索命令字符串搜索命令find命令与grep命令的区别 帮助命令压缩与解压缩命令关机和重启命令其他常用命令 挂载命令用户登录查看和用户
  • 对php-fpm的理解重述

    目录 目录CGI的出现FastCGIphp fpm摘录 FPM的请求处理流程nginx转发请求给FPM 参考 CGI的出现 早期的Web服务器只能处理HTML等静态文件 xff0c 随着PHP等动态语言的出现 xff0c Web Serve
  • Shell编程——基础入门

    目录 目录Shell概述 Shell是什么Shell的分类 脚本执行方式 echo输出命令第一个脚本 Bash的基本功能 命令别名与快捷键历史命令 history命令历史命令的调用命令与文件补全 输入输出重定向 输出重定向输入重定向 多命令
  • Linux命令之<cp命令>

    cp命令用来复制文件或者目录 xff0c 是Linux系统中最常用的命令之一 一般情况下 xff0c shell会设置一个别名 xff0c 在命令行下复制文件时 xff0c 如果目标文件已经存在 xff0c 就会询问是否覆盖 xff0c 不
  • PHPer的进阶探索之旅

    目录 目录前言魔术常量PHP常量详解define和const的区别PHP中的闭包PSR 规范PHP命令空间Web性能优化与HTTP2 前言 作为一个PHPer xff0c 一直认为Java与PHP都 差不多 xff0c 尽管身边的人会说大型
  • Linux下的VIM编辑器

    目录 目录VIM编辑器的概述VIM编辑器的操作模式vim命令的使用操作模式的命令 底行模式的常用指令命令模式的常用指令VIM键位指令图 VIM编辑器的概述 VIM其实VI编辑器的升级版本 VIM相对于VI xff0c 增强的功能 xff1a

随机推荐

  • Linux中的磁盘管理

    目录 目录磁盘管理命令向服务器添加硬盘磁盘分区 分区模式之MBR分区分区模式之GPT分区 分区操作 Linux中的MBR分区Linux中的GPT分区 分区格式化操作挂载分区Linux中的swap分区 磁盘管理命令 xff08 1 xff09
  • Linux中的用户管理

    目录 目录概述关于用户组的配置文件关于用户的配置文件用户和用户组的基本命令 用户组操作用户操作 用户和用户组的进阶命令 主要组与附属组 其他命令 概述 使用操作系统的人 xff0c 我们称之为用户 在Linux中允许多个不同用户同时登录同一
  • Linux中的计划任务Crontab

    目录 目录介绍安装并检查Crontab服务入门栗子Crontab的基本组成 用户任务调度 crontab命令的使用及相关文件Crontab的任务配置格式 系统任务调度系统级任务调度与用户级任务调度 注意事项参考 介绍 Crontab是什么
  • MySQL易忘常用的知识点

    目录 目录前言WHEREDISTINCTGROUP BYSELECT语句完整的执行顺序NOT NULLNULL和default默认值MySQL中文字节问题关于MYSQL Incorrect string value参考 前言 这里介绍MyS
  • MySQL深度掌握之路

    目录 目录前言知识点 前言 知识点 MySQL要求AUTO INCREMENT列必须有某种索引 xff0c 如果没有索引 xff0c 那么表的定义就是不合法的 任何一个PRIMARY KEY列必须是NOT NULL的 如果定义没有设置为NO
  • Linux中Web环境的搭建LNMP

    目录 目录环境搭建准备 为Linux创建后续使用的用户XShell的上传下载上传安装包 Web服务器的搭建 目录的创建php fpm编译安装 安装GCC安装libxml2和libxml2 devel包安装BZip2包安装libcurl包安装
  • 微信第三方小程序授权开发之旅

    目录 目录开发准备开发流程注意事项 开发准备 授权方AppId第三方AppId 开发流程 注意事项 开发过程中 xff0c 处于测试阶段 xff08 未全网发布 xff09 xff0c 需要在微信第三方平台中设置授权测试公众号列表 xff0
  • Linux中的网络管理——计算机网络基础

    目录 目录OSI七层网络模型TCPIP协议四层模型OSI模型与TCPIP模型的比较IP地址 IP地址分类子网掩码 端口DNS DNS服务域名DNS查询 DNS查询过程DNS查询类型 网关 OSI七层网络模型 ISO OSI七层模型 需要说明
  • 在MySQL中使用MD5加密【入门体验】

    什么是MD5 xff1f MD5信息摘要算法 英语 MD5 Message Digest Agorithm xff0c 一种被广泛使用的密码散列函数 xff0c 可以产生出一个128位 16字节 的散列值 hash value xff0c
  • Linux中Web环境memcached和redis安装(FOR PHP)

    目录 目录前言php memcached扩展安装 服务器端安装客户端安装设置memcached开机自启脚本 创建脚本设置服务服务命令 php redis扩展安装 redis安装服务命令开放redis端口redis手动安装 修改redis配置
  • Linux中Web环境安装php的扩展

    目录 文章目录 目录前言安装imagick扩展安装ImageMagick安装php扩展imagick 安装PDO扩展安装PDO组件安装PDO MYSQL组件 前言 继上文 Linux中Web环境memcached和redis安装 xff08
  • Maven项目构建工具的入门使用

    目录 目录前言Maven的介绍及环境搭建创建Maven项目Maven的常用命令自动创建目录骨架Maven中的坐标和仓库 坐标仓库 关于仓库的介绍更改本地仓库的位置 Maven的生命周期和插件 生命周期插件 pom xml常见元素介绍Mave
  • Spring框架自学之路——AOP

    目录 目录AOP 介绍AOP底层原理核心概念 基于AspectJ的Spring AOP操作 AOP操作准备XML方式定义切点案例扩展注解方式 AOP 介绍 AOP xff0c 即面向切面编程 xff0c 简单来说其思想指的是在不修改原有代码
  • Spring框架自学之路——JdbcTemplate

    目录 目录介绍使用JdbcTemplate 准备工作添加操作更新操作删除操作查询操作 返回一个值返回对象 xff08 返回一行数据 xff09 返回List集合 xff08 返回多行数据 xff09 Spring配置c3p0连接池 c3p0
  • Spring框架自学之路——事务管理

    目录 目录前言介绍案例说明案例准备及问题分析声明式事务管理 事务管理器基于XML配置声明式事务 XML配置事务配置说明 基于注解实现声明式事务 注解配置 64 Transactional注意事项 知识点扩展或参考 前言 文中主要介绍的是Sp
  • MyBatis框架自学之路——简易入门

    目录 目录介绍入门案例 准备工作MyBatis的CURD MyBatis框架的基本原理使用MyBatis的工具类测试类查询操作 根据用户ID查询对应的用户记录根据用户名查询一条或多条用户记录 添加操作 自增主键的返回非自增主键的返回 删除操
  • 今日大家一起来学MySQL的存储引擎和锁机制

    目录 文章目录 目录前言MySQL常用的存储引擎MyISAMInnoDBMyISAM和InnoDB的对比 讲一下让人敬畏的锁机制MySQL中的锁MyISAM的表锁案例分析 MyISAM的并发插入案例分析 MyISAM的并发调度InnoDB中
  • ubuntu18.04 密码正确但是进不去系统图形化界面

    ubuntu18 04 密码正确但是进不去系统图形化界面 卸载原有的驱动 ALT 43 CTRL 43 F2进 命令 模式 xff1a 卸载英伟达驱动并重启 sudo apt get remove purge nvidia sudo apt
  • mysql json table

    SELECT FROM zichaxun t1 inner join JSON TABLE CONCAT 39 34 39 REPLACE 39 1 2 39 39 39 39 34 34 39 39 34 39 34 34 COLUMNS
  • oc的MRC和ARC的区别

    import 34 ViewController h 34 64 interface ViewController 64 end 64 implementation ViewController void viewDidLoad super