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的判断准则: 只要没有任何一个强指针指向该对象,该对象就会被释放. ( ...
随机推荐
- Bootstrap3模态框Modal垂直居中样式
1,Bootstrap 模态框插件Bootbox垂直居中样式: <!DOCTYPE html> <html lang="en"> <head> ...
- Android项目实战_手机安全卫士程序锁
###1.两个页面切换的实现1. 可以使用Fragment,调用FragmentTransaction的hide和show方法2. 可以使用两个布局,设置visibility的VISIABLE和INV ...
- html5——动画案例(无缝滚动)
无缝滚动:是两组拼在一起的 <!DOCTYPE html> <html lang="en"> <head> <meta charset=& ...
- Java 之jdbc连接mysql数据库
package jdbc; import java.io.InputStream; import java.sql.Connection; import java.sql.DriverManager; ...
- vmware vSphere client中,选择文件->部署OVF模板,报错处理方法
在vmware vSphere client中,选择文件->部署OVF模板,选择指定的OVA文件,按步骤进行,则会出现这样的错误:此OVF软件包使用了不受支持的功能.OVF软件包需要不支持的硬件 ...
- php连接数据库的两种方式
一.mysqli方式连接数据库 $mysql_conf = array( 'host' => 'localhost:3306', 'db' => 'ssql', 'db_user' =&g ...
- Chromium CEF 2623 -- 支持 xp 的最后一个版本源码下载和编译步骤
背景 因为项目需要在客户端中内嵌浏览器,需要支持 xp 操作系统和播放视频,但 CEF 2623 以后的版本已经不支持 xp 操作系统,也不再提供 2623 版本的二进制发布包下载,只好自己手动编译. ...
- 洛谷——P1122 最大子树和
P1122 最大子树和 树形DP,$f[u]$表示以u为根的子树的最大美丽指数 $f[u]+=max(0,f[v])$ 树形DP的基本结构,先搜再DP,这题感觉有点儿贪心的性质,选就要选美丽值> ...
- [HDU] 4507 恨7不成妻
吉哥系列故事——恨7不成妻 Time Limit: 1000/500 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others)Tota ...
- Python基础-while奇数和
利用while循环计算100*座位号 以内奇数的和. n = 1 s = 0 SeatID=1 while n <= 100*SeatID: s += n n += 2 print '奇数的和: ...