文档章节

9、OC —— autorelease

cobish
 cobish
发布于 2014/12/09 22:43
字数 332
阅读 51
收藏 2

1、什么是autorelease,autorelease和release有什么区别,autorelease有什么用处?

    a)autorelease算是对象延迟release,只在autoreleasepool(自动释放池中有效),实际就是在autoreleasepool范围结束时对池子中的对象都进行release一次

    b)release是立马直接release对象,autorelease只在自动释放池结束是release

    c)autorelease主要用在类方法中


2、什么是autorelease?(默认我们已经有一个Person类)

    Person.m

#import "Person.h"

@implementation Person

- (void)dealloc
{
    NSLog(@"Person 被销毁了");
    [super dealloc];
}

@end

    main.m

#import <Foundation/Foundation.h>
#import "Person.h"

int main(int argc, const char * argv[])
{
    @autoreleasepool {
        Person *person = [[Person alloc] init];
        [person autorelease];
        
        // 或者 Person *person = [[[Person alloc] init] autorelease];
    }
    return 0;
}

    在上面的autoreleasepool结束时person对象便会被释放,可设置断点查看


3、autorelease和release有什么区别?

    main.m

#import <Foundation/Foundation.h>
#import "Person.h"

int main(int argc, const char * argv[])
{
    @autoreleasepool {
        Person *person = [[Person alloc] init];
        [person autorelease];
        
        NSLog(@"abc");
        
        // 若是autorelease,打印顺序:"Person 被销毁了","abc"
        // 若是release,打印顺序则是:"abc","Person 被销毁了"
    }
    return 0;
}


4、autorelease有什么用处?(假设Person有一个类方法person)

    Person.m

+ (instancetype)person
{
    Person *person = [[[self alloc] init] autorelease];
    
    // 若这里不用autorelease,而是release的话,person会直接被回收,造成野指针错误
    // [person release];
    return person;
}

    main.m

#import <Foundation/Foundation.h>
#import "Person.h"

int main(int argc, const char * argv[])
{
    @autoreleasepool {
        Person *person = [Person person];
        
        // 在autoreleasepool结束后person便会被释放
    }
    return 0;
}




© 著作权归作者所有

共有 人打赏支持
cobish
粉丝 33
博文 150
码字总数 45747
作品 0
深圳
私信 提问
【iOS开发干货】Objective-C基础知识点总结(一)

长文,建议跳跃选择性阅读,大约10min可以读完全文。 iOS开发 1.目录 1.个人学习建议 2.知识点整理 3.下集预告 iOS这一行,都过了这么多年,还是水分很足,没有几个愿意安安心心查资料写东西...

曹真
2017/06/21
0
0
03 - Object-C内存管理

1、基本原理 1.1、 什么是内存管理 移动设备的内存极其有限,每个app所能占用的内存是有限制的 当app所占用的内存较多时,系统会发出内存警告,这时得回收一些不需要再使用的内存空间。比如回...

口十耳
2015/12/29
18
0
ARC机制总结和用ARC建立模型

ARC 全称:Automatic Reference Counting 使用ARC 只需要在建立一个新的项目的时候把 下面的√打上 Xcode5以后都会默认建议开发者使用ARC机制 新的项目中如果有部分文件不想使用ARC就 在Bui...

小近
2014/11/07
170
0
OC语言自学《十一》---- OC(内存管理知识总结)

一、retain、release retain方法给对象的引用计数器+1 release方法给对象的引用计数器-1 retain方法会返回对象本身,release方法没有返回值 dealloc方法 当一个对象要被回收的时候会被调用 ...

罗眯眯
2014/04/06
0
0
Object-C基础-07-内存管理

一、基本原理 1.什么是内存管理 移动设备的内存极其有限,每个app所能占用的内存是有限制的 当app所占用的内存较多时,系统会发出内存警告,这时得回收一些不需要再使用的内存空间。比如回收...

Corwien
2016/03/20
48
0

没有更多内容

加载失败,请刷新页面

加载更多

Spring Boot 2.x基础教程:快速入门

简介 在您第1次接触和学习Spring框架的时候,是否因为其繁杂的配置而退却了?在你第n次使用Spring框架的时候,是否觉得一堆反复黏贴的配置有一些厌烦?那么您就不妨来试试使用Spring Boot来让...

程序猿DD
昨天
1
0
SpringSecurity认证流程源码级详解

SpringSecurity认证流程源码级详解 认证流程说明 认证结果如何在多个请求之间共享 获取认证用户信息

chendom
昨天
1
0
C语言中的volatile——让我保持原样

volatile译为:易变的。这不是和题目的让我保持原样矛盾了吗?其实不然,在变量前加上该关键字修饰,确实是告诉编译器,这个变量是一个容易改变的变量,不要对它进行优化,每次都要到变量的地...

天王盖地虎626
昨天
1
0
五、RabbitMQ的消息属性(读书笔记)

简介 当使用RabbitMQ发布消息时,消息又AMQP规范中的三个低层帧类型组成: Basic.publish方法帧; 内容头帧; 消息体帧; 这三种帧类型按顺序一起工作,以便消息传递时完好无损。 其中,内容...

XuePeng77
昨天
1
0
JavaEE开发的颠覆者SpringBoot实战摘要笔记

一、注解理解 1.spring注解 1)@Configuration/@ComponentScan/@Bean注解实现java方式的配置。 @Configuration代替xml文件 @ComponentScan指定扫描范围 @Bean代替bean标签 2)@Bean、@Componen...

啃不动地大坚果
昨天
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部