//
// 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. 转:java中static、final、static final的区别

    http://blog.csdn.net/qq1623267754/article/details/36190715 final可以修饰:属性,方法,类,局部变量(方法中的变量) final修饰的属性 ...

  2. SpringBoot 搭建

    1.使用Eclipse 建立Maven项目(webapp OR quickstart) 2.配置Maven,如下: <parent> <groupId>org.springfr ...

  3. JS高级——instanceof语法

    基本语法 对象 instanceof 构造函数 基本使用 <script> function Person() { } //p--->Person.prototype--->O ...

  4. RPU4+1视图(转)

    4+1视图模型概况 Kruchten 提出了一个"4+1"视图模型,从5个不同的视角包括包括逻辑试图.进程视图.物理视图.开发视图.场景视图来描述软件体系结构.每一个视图只关心系统 ...

  5. Nginx 反向代理并缓存及缓存清除

    Nginx 反向代理并缓存及缓存清除 原文地址:http://www.cnblogs.com/caoguo/p/5012447.html 一. Nginx 配置 #user nobody; worke ...

  6. 00_Rust安装及Hello World

    Rust 官网: https://www.rust-lang.org 版本:nightly.beta.stable 如何设计语言的讨论:https://github.com/rust-lang/rfc ...

  7. LNOI2019 退役记

    Day -4 最近这两天智商有点不在线啊..得好好调整作息了,滚粗感++ 复习模板好啊 下午睡了一觉,智商似乎回来了一丢丢,滚粗感-- Day -3 智商略有回暖,滚粗感-- 明天有模拟赛,要加油啊 ...

  8. Bootstrap练习:可折叠下拉菜单

    代码: <!DOCTYPE html> <html lang="zh-cn"> <head> <meta charset="UT ...

  9. 02. 爬取get请求的页面数据

    目录 02. 爬取get请求的页面数据 一.urllib库 二.由易到难的爬虫程序: 02. 爬取get请求的页面数据 一.urllib库 urllib是Python自带的一个用于爬虫的库,其主要作用 ...

  10. hdu2008 数值统计【C++】

    数值统计 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submis ...