iOS开发系列-Foundation与CoreFoundation内存管理
概述
对于初学者来说,可能仅只能将ARC用在objective-c对象上(也即继承自NSObject的对象),但是如果涉及到较为底层的东西,比如Core Foundation中的malloc()或者free()等,ARC就鞭长莫及了,这时候还是需要自己手动进行内存管理。
ARC下Foundation与CoreFoundation内存管理
- (void)ARCChange{
// Foundation --> CoreFoundation框架数据类型的转换
NSString *str = [[NSString alloc] init];
// (__bridge CFStringRef) 等同于MRC下的直接转换,不会移交对象的内存管理
// CFStringRef strRef = (__bridge CFStringRef)str;
// 这种方式转换,会移交对象的内存管理权
CFStringRef strRef = (__bridge_retained CFStringRef)(str);
NSLog(@"%@", strRef);
CFRelease(strRef);
// CoreFoundation ----> Foundation框架的数据类型转换
CFStringRef strRef2 = CFStringCreateWithCString(CFAllocatorGetDefault(), "123", kCFStringEncodingUTF8);
// (__bridge CFStringRef) 等同于MRC下的直接转换,不会移交对象的内存管理
// NSString *str2 = (__bridge NSString *)strRef2;
// NSLog(@"%@", str2);
// CFRelease(strRef2);
// 这种方式转换,会移交对象的内存管理权
// CFBridgingRelease == __bridge_transfer NSString *
// NSString *str2 = (__bridge_transfer NSString *)strRef2;
NSString *str2 = CFBridgingRelease(strRef2);
NSLog(@"%@", str2);
}
MRC下Foundation与CoreFoundation内存管理
- (void)MRCChange{
// Foundation ---> CoreFoundation
NSString *str = [[NSString alloc] init];
// CFStringRef 这种转换 属于直接转换 不会移交对象的内存管理
CFStringRef strRef = (CFStringRef)str;
NSLog(@"%@", strRef);
[str release];
// CoreFoundation 到 Foundation框架的数据类型转换
CFStringRef strRef2 = CFStringCreateWithCString(CFAllocatorGetDefault(), "123", kCFStringEncodingUTF8);
// 这种转换,属于直接转换 不会移交对象的内存管理
NSString *str2 = (NSString *)strRef2;
NSLog(@"%@", str2);
CFRelease(strRef2);
}
iOS开发系列-Foundation与CoreFoundation内存管理的更多相关文章
- 【iOS开发-33】学习手动内存管理临时抛弃ARC以及retain/assign知识——iOSproject师面试必考内容
我们为什么须要内存管理?当使用内存达到40M和45M时候会发出警告,假设不处理,占用内存达到120M时直接强制关闭程序. 所以出现闪退除了是程序出现逻辑错误,还有可能是内存使用过大. (1)创建一个对 ...
- iOS开发ARC机制下的内存管理技术要点
转载一篇: iOS开发ARC内存管理技术要点.ARC内存管理原则总结.iOS ARC内存管理总结 ARC内存管理机制 (一)ARC的判断准则: 只要没有任何一个强指针指向该对象,该对象就会被释放. ( ...
- iOS开发系列文章(持续更新……)
iOS开发系列的文章,内容循序渐进,包含C语言.ObjC.iOS开发以及日后要写的游戏开发和Swift编程几部分内容.文章会持续更新,希望大家多多关注,如果文章对你有帮助请点赞支持,多谢! 为了方便大 ...
- iOS开发系列--Swift进阶
概述 上一篇文章<iOS开发系列--Swift语言>中对Swift的语法特点以及它和C.ObjC等其他语言的用法区别进行了介绍.当然,这只是Swift的入门基础,但是仅仅了解这些对于使用S ...
- iOS开发系列--数据存取
概览 在iOS开发中数据存储的方式可以归纳为两类:一类是存储为文件,另一类是存储到数据库.例如前面IOS开发系列-Objective-C之Foundation框架的文章中提到归档.plist文件存储, ...
- iOS开发系列--网络开发
概览 大部分应用程序都或多或少会牵扯到网络开发,例如说新浪微博.微信等,这些应用本身可能采用iOS开发,但是所有的数据支撑都是基于后台网络服务器的.如今,网络编程越来越普遍,孤立的应用通常是没有生命力 ...
- iOS开发系列--并行开发其实很容易
--多线程开发 概览 大家都知道,在开发过程中应该尽可能减少用户等待时间,让程序尽可能快的完成运算.可是无论是哪种语言开发的程序最终往往转换成汇编语言进而解释成机器码来执行.但是机器码是按顺序执行的, ...
- 【转】iOS开发系列--数据存取
原文: http://www.cnblogs.com/kenshincui/p/4077833.html#SQLite 概览 在iOS开发中数据存储的方式可以归纳为两类:一类是存储为文件,另一类是存储 ...
- iOS开发系列--App扩展开发
概述 从iOS 8 开始Apple引入了扩展(Extension)用于增强系统应用服务和应用之间的交互.它的出现让自定义键盘.系统分享集成等这些依靠系统服务的开发变成了可能.WWDC 2016上众多更 ...
随机推荐
- C#中的this关键字
C# this关键字的四种用法 - 天碼行空 - 博客园 https://www.cnblogs.com/jh007/p/6120654.html C#中this关键字详解 - lin37985的专栏 ...
- KMP概念上小结
kmp算法的时间复杂度是O(m+n) 主要作用: 1.最长公共前后缀问题 2.原串中含有几个模式串问题 3.循环节问题
- Django框架(八)—— 模板层:模板导入、模板继承、静态文件
目录 模板导入.继承.静态文件 一.模板导入 1.语法 2.使用 二.模板的继承 1.使用模板的继承 2.强调(注意点) 三.静态文件 1.在配置文件settings中配置过静态文件 2.导入使用静态 ...
- Java原始数据类型
Java定义了八种基本类型的数据:byte,short,int,long,char,float,double和boolean. 基本类型通常被称为简单类型.这些基本类型可以分为四组: 整数 - 包括: ...
- 11-Ubuntu-根目录下各目录的功能详细介绍
转自: https://www.cnblogs.com/yudar/p/5809219.html 注:总结的非常详细
- 匈牙利算法实战codevs1022覆盖
1022 覆盖 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 大师 Master 题解 查看运行结果 题目描述 Description 有一个N×M的单位方格中 ...
- 二维码APP后台开发记录
先是搭建环境,我们采用spring4.2.1+hibernate5.0.1进行搭建,从官网上下载框架必用jar包. 在MyEclipse里,创建web项目,创建lib包,将相关jar包放入,别忘了my ...
- ttytype - 终端设备映射的默认终端类型
DESCRIPTION(描述) /etc/ttytype 文件把termcap/terminfo中的终端类型名与tty行关联起来.每行包括一种终端类型,后面跟着空格,然后是tty名(不带 /dev/ ...
- CentOS7.6编译安装openssl-1.1.1c
卸载旧版本OpenSSL # which openssl/usr/bin/openssl# mv openssl openssl.oldrm -rf /etc/ssl #删除配置文件 CentOS7. ...
- cpu相关信息查看
查看CPU型号:grep "model name" /proc/cpuinfo | uniqdmidecode -s processor-version | uniq 查看物理CP ...