oc52--autorelease1
//
// main.m
/*
autorelease也是用于内存管理的,给对象发送autorelease消息就会把对象放入autoreleasepool这个池子中,当池子销毁的时候会对池子里面的所有对象发送一条release消息,只是计数器减一,不一定会销毁。
1.autorelease方法会返回对象本身,好比init方法,
Person *p = [Person new];
p = [p autorelease];
2.调用autorelease方法不会对对象的引用计数器加1。
3.不需要写release方法。
*/ #import <Foundation/Foundation.h>
#import "Person.h" int main(int argc, const char * argv[]) { //需要把项目了 变成手动内存管理MRC
@autoreleasepool {
Person *p3 =[[Person alloc] init];
[p3 run]; // 时时刻刻都关注对象什么时候被释放
[p3 release];
p3 = nil; // 给野指针发送消息
[p3 run];
} Person *p4 = nil;
@autoreleasepool { // 创建一个自动释放池
p4 = [[Person alloc] init]; // 1
// 不用关心对象什么时候释放, 只要能够访问p的地方都可以使用p
p4 = [p4 autorelease]; // 只要调用了autorelease,将对象p放入自动释放池中,当自动释放池释放的时候,会池里面的所有对象发送一条release消息。
NSLog(@"%lu",[p4 retainCount]); // p4 = [p4 autorelease];
p4 = [p4 autorelease];
p4 = [p4 autorelease];
p4 = [p4 autorelease];
p4 = [p4 autorelease];
NSLog(@"%lu",[p4 retainCount]); //
[p4 retain]; // [p4 run];
} // 自动释放池销毁了, 给自动释放池中所有的对象发送一条release消息
NSLog(@"%lu",[p4 retainCount]);
[p4 retain];
NSLog(@"%lu",[p4 retainCount]);
[p4 run]; // autorelease其它写法
@autoreleasepool {
// Person *p = [[Person alloc] init];
// p = [p autorelease];
Person *p = [[[Person alloc] init] autorelease];
[p run];
} // ios5以前的写法:创建一个自动释放池
// 自动释放池只是将release延迟了而已 NSAutoreleasePool *pool5 = [[NSAutoreleasePool alloc] init]; Person *p5 = [[[Person alloc] init] autorelease];
[p5 run]; // 销毁一个自动释放池
[pool5 release]; return ;
}
// Person.h #import <Foundation/Foundation.h> @interface Person : NSObject - (void)run; @end
// Person.m #import "Person.h" @implementation Person - (void)run
{
NSLog(@"%s", __func__);
} - (void)dealloc
{
NSLog(@"%s", __func__);
[super dealloc];
} @end
oc52--autorelease1的更多相关文章
- 读oc52个有效方法的总结
这本书主要是对于oc语言的代码优化和一些我们不知道的精华.全书分为7章节 1.熟悉oc语言 第一条:了解oc的语言起源 主要是对于oc语言的起源介绍和oc语言的特点进行概括,oc语言主要是使用消息结构 ...
- jquery点击label触发2次的问题
今天写问卷的时候遇到个label点击的时候,监听的click事件被执行两次:产生这个的原因么...事件冒泡 <div class="questionBox checkBox" ...
随机推荐
- HTML和CSS网页开发基础
一 HTML文档结构 HTML文档结构:<html>.<head>.<title>.<body>构成HTML页面中最基本的元素. HTML常用标记:1. ...
- Android Unable to add window -- token android.os.BinderProxy@3a067204 is not valid错误分析记录
打开APP时,出现闪退的情况,查看android studio报错信息,主要为: Unable to add window -- token android.os.BinderProxy@3a0672 ...
- 将vim的UltiSnips的快捷键彻底从tab键中分离
在我之前的<<vim之补全1>>和<<vim之补全2>>中曾经成功的将vim的supertab和UltiSnips共用一个tab键, 这样做的优点的两种 ...
- 基于证书的MS SQL2005数据库镜像搭建
一.准备工作: 3台服务器同版本,硬盘分区大小相同,安装相同版本数据库软件. host中分别标注3台服务器IP和主机名称. 主体服务器上创建数据库,并进行完整备份数据库和数据库事务. 拷贝备份文件给镜 ...
- java设计模式02观察者模式
观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象.这个主题对象在状态上发生变化时,会通知所有观察者对象,使它们能够自动更新自己. 这里主要讲一下学习内置观察者的记录,在JA ...
- FTP服务器访问主动模式、被动模式
在公司里面,经常需要访问外网FTP取资料等情况.但是有时用windows界面访问经常遇到各种问题. 下面介绍两种客户端是如何访问ftp服务器. 首先我们需要说明:防火墙,是阻拦外界与内部的通讯的一道关 ...
- redis中关于使用string类型还是hash类型
前篇:最近在做一个将redis中大数据量进行合并缩减优化的工作,其中一项按月将数据进行合并.将一个月的数据放入一个key-value键值对中. 例:p2d20180901-3.p2d20180902- ...
- PAT_A1107#Social Clusters
Source: PAT A1107 Social Clusters (30 分) Description: When register on a social network, you are alw ...
- css 样式 解释
字体属性:(font) 大小 {font-size: x-large;}(特大) xx-small;(极小) 一般中文用不到,只要用数值就可以,单位:PX.PD 样式 {font-style: obl ...
- 10.多shard场景下relevence score可能不准确
主要知识点 多shard场景下relevence score可能不准确的原因 多shard场景下relevence score可能不准确解决方式 一.多shard场景下relevance sc ...