//
// 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的更多相关文章

  1. 读oc52个有效方法的总结

    这本书主要是对于oc语言的代码优化和一些我们不知道的精华.全书分为7章节 1.熟悉oc语言 第一条:了解oc的语言起源 主要是对于oc语言的起源介绍和oc语言的特点进行概括,oc语言主要是使用消息结构 ...

  2. jquery点击label触发2次的问题

    今天写问卷的时候遇到个label点击的时候,监听的click事件被执行两次:产生这个的原因么...事件冒泡 <div class="questionBox checkBox" ...

随机推荐

  1. C#入门经典 Chapter4 流程控制

    4.1布尔逻辑 布尔比较运算符 ==  !=   <   >    <=    >= 处理布尔值的布尔值运算符 ! & | ^(异或) 条件布尔运算符 &&am ...

  2. 《Java编程的逻辑》第二部分 面向对象

  3. checkbox与文字混排无法对齐到一行的解决办法

    直接上代码: <span><input style="vertical-align:middle" type="checkbox" name= ...

  4. Hash二次探测

    Hash的二次探测,当hash的长度为n:插入val,当Hash[val]不为0时,选择新地址newval = val +(-) 1*1,val+(-)2*2,val+(-)(n-1)*(n-1); ...

  5. JS——sort

    1.a-b升序 <script> var arr = [2, 3, 1, 5, 0]; function compare(a, b) { return a - b; } console.l ...

  6. 六时车主 App iOS隐私政策

    本应用尊重并保护所有使用服务用户的个人隐私权.为了给您提供更准确.更有个性化的服务,本应用会按照本隐私权政策的规定使用和披露您的个人信息.但本应用将以高度的勤勉.审慎义务对待这些信息.除本隐私权政策另 ...

  7. Centos7搭建lamp环境

    首先安装apache Centos7默认已经安装httpd服务,只是没有启动. 如果需要重新安装,输入 yum install -y httpd 启动服务: systemctl start httpd ...

  8. 深入理解Three.js(WebGL)贴图(纹理映射)和UV映射

    本文将详细描述如何使用Three.js给3D对象添加贴图(Texture Map,也译作纹理映射,“贴图”的翻译要更直观,而“纹理映射”更准确.).为了能够查看在线演示效果,你需要有一个兼容WebGL ...

  9. 【上海站】EOLINKER 用户培训之旅,等你来共建API新连接

    从今年3月4日起,EOLINKER AMS 团队将再次开启全国用户培训之旅.本次全国培训之旅依旧将覆盖北上广深等国内主要城市,重点提供两种服务内容,一是 对 EOLINKER 产品的交流,包括 API ...

  10. Mapreduce代码疑点(1)

    一.Hadoop MultipleInputs.addInputPath 读取多个路径 https://blog.csdn.net/t1dmzks/article/details/76473905 M ...