oc55--ARC单个对象的内存管理
// Person.h #import <Foundation/Foundation.h> @interface Person : NSObject @end
// Person.m #import "Person.h" @implementation Person - (void)dealloc
{ NSLog(@"%s", __func__);
// [super dealloc]; //ARC不准写
}
@end
//
// main.m
// ARC基本概念
// 不准许使用retain,release,dealloc里面不准许[super dealloc],编译器特性不是运行时特性,是xocde的功能,不是运行时跟你回收内存,而是xcode在编译的时候会跟你插入retain,release,是xcode帮你写了一些释放内存的代码。其他语言的垃圾回收机制是定时的去查看,没有使用就回收,ARC是写好了代码,执行代码,不是定时的去查看。完全消除了手动内存的管理。ios5之后默认就是ARC的。 插入代码之后就可以在手机上面运行了。 #import <Foundation/Foundation.h>
#import "Person.h" int main(int argc, const char * argv[]) { Person *p1 = [[[Person alloc] init] autorelease]; //报错,ARC不准写autorelease
//默认情况下所有的指针都是强指针
Person *p = [[Person alloc] init];
[p retain]; //报错,ARC不准写retain
[p release]; //报错,ARC不准写release {
Person *p5 = [[Person alloc]init]; //大括号执行完,p5就销毁了,就没有强指针指向这个对象了,那么这个对象就销毁了
} // [Person dealloc] {
Person *p6 = [[Person alloc]init]; //
p6 = nil; // 只要没有强指针,对象就释放。单个对象内存管理:不使用就置位nil,
// [Person dealloc]
} {
// ARC判断对象是否释放,并不是判断引用计数。 ARC的判断准则: 只要没有强指针指向对象, 对象就会释放
// 默认情况下所有的指针都是强指针
Person *p = [[Person alloc] init];
p = nil; //[Person dealloc]
__strong Person *p1 = [[Person alloc] init];
// // 弱指针
__weak Person *p2 = p1;
p1 = nil; //[Person dealloc]
// 在开发中, 千万不要使用一个弱指针保存一个刚刚创建的对象
// 立即释放
__weak Person *p3 = [[Person alloc] init]; //[Person dealloc]
} return ;
}
oc55--ARC单个对象的内存管理的更多相关文章
- oc56--ARC多个对象的内存管理
// main.m // ARC中多个对象的内存管理:ARC的内存管理就是MRC的内存管理(一个对象释放的时候,必然会把它里面的对象释放),只不过一个是Xcode加的代码,一个是我们自己加的代码: / ...
- oc-31-多对象的内存管理
在每个OC对象内部,都专门有8个字节的存储空间来存储引用计数器. 引用计数器的常见操作 retain消息:堆内存中对象的计数器变量 +(该方法返回对象本身,要想计数器变量加1就要调用对象的retain ...
- iOS: ARC & MRC下string内存管理策略探究
ARC & MRC下string内存管理策略探究 前两天跟同事争论一个关于NSString执行copy操作以后是否会发生变化,两个人整了半天,最后写代码验证了一下,发现原来NSString操作 ...
- block没那么难(三):block和对象的内存管理
本系列博文总结自<Pro Multithreading and Memory Management for iOS and OS X with ARC> 在上一篇文章中,我们讲了很多关于 ...
- Objective-C之集合对象的内存管理
*:first-child { margin-top: 0 !important; } body > *:last-child { margin-bottom: 0 !important; } ...
- Java进阶2 数组内存和对象的内存管理知识
Java进阶2 数组内存和对象的内存管理知识 20131028 前言: 在面试的时候,如果是Java的编程语言,也许你认为没有什么可以问的,只能够说明你对于Java了解的太浅了,几乎就是两个星期的节奏 ...
- oc对象的内存管理
oc没有java的垃圾回收机制,所以对象的内存释放很重要,基本数据类型,我们不用理会,编译器会处理: oc的每个对象内部都由一个计数器,用来记录当前有几个指针在指向该对象:当计数器为0时该对象会从内存 ...
- iOS ARC编译器规则和内存管理规则
iOS 开发当中,自动引用计数已经是标准的内存管理方案.除了一些老旧的项目或者库已经没有人使用手动来管理内存了吧. ARC无疑是把开发者从繁琐的保留/释放引用对象逻辑中解脱出来.但这并不是万事大吉了, ...
- iOS开发ARC机制下的内存管理技术要点
转载一篇: iOS开发ARC内存管理技术要点.ARC内存管理原则总结.iOS ARC内存管理总结 ARC内存管理机制 (一)ARC的判断准则: 只要没有任何一个强指针指向该对象,该对象就会被释放. ( ...
随机推荐
- Windows10开启热点
1.以网线的连接方式,已经连接. 2.打开CMD 3. 开启热点 3.1设置热点名称和密码 netsh wlan set hostednetwork mode=allow ssid=name key= ...
- 解决:efi usb device has been blocked by the current security policy
解决:efi usb device has been blocked by the current security policy 问题描述:U盘装系统或者其他操作时,是因为BIOS安全策略,出现上述 ...
- android ormlite 清空表
delete from TableName; //清空数据 update sqlite_sequence SET seq = where name ='TableName';//自增长ID为0 Sam ...
- Oracle、Db2、SqlServer、MySQL 数据库插入当前系统时间
做易买网项目,由于对数据库插入系统时间不了解,常常遇到的问题: 1.java.sql.SQLException: ORA-01861: 文字与格式字符串不匹配.原因:由于获取系统时间类型不对,应为sy ...
- 3.用Redis Desktop Manager连接Redis(CentOS)
Redis Desktop Manager是Redis图形化管理工具,方便管理人员更方便直观地管理Redis数据. 然而在使用Redis Desktop Manager之前,有几个要素需要注意: 一. ...
- Centos 修改源
1首先备份原来的配置文件: mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup 2下载对应版本r ...
- unable to get system library for the project
当向eclipse导入项目实例后,项目上出现红叉的错误提示,在项目属性里的Java Build Path里发现了错误提示复选选项: unable to get system library for t ...
- js获得子节点, 获得tab转json值
//提取表格的值,JSON格式 function GetTableData(table) { var tableData = new Array(); //创建数组 alert("行数:&q ...
- vs Could Not Connect
解决, 在win7上卸载IIS 10.0 Express ,安装 IIS7.5 Express
- CAD绘制一个对齐标注(com接口VB语言)
主要用到函数说明: _DMxDrawX::DrawDimAligned 绘制一个对齐标注.详细说明如下: 参数 说明 DOUBLE dExtLine1PointX 第一条界线开始点X值 DOUBLE ...