//
// main.m
// 08-autorelease
//
// Created by apple on 13-8-9.
// Copyright (c) 2013年 itcast. All rights reserved.
// /*
1.autorelease的基本用法
1> 会将对象放到一个自动释放池中
2> 当自动释放池被销毁时,会对池子里面的所有对象做一次release操作
3> 会返回对象本身
4> 调用完autorelease方法后,对象的计数器不变 2.autorelease的好处
1> 不用再关心对象释放的时间
2> 不用再关心什么时候调用release 3.autorelease的使用注意
1> 占用内存较大的对象不要随便使用autorelease
2> 占用内存较小的对象使用autorelease,没有太大影响 4.错误写法
1> alloc之后调用了autorelease,又调用release
@autoreleasepool
{
// 1
Person *p = [[[Person alloc] init] autorelease]; // 0
[p release];
} 2> 连续调用多次autorelease
@autoreleasepool
{
Person *p = [[[[Person alloc] init] autorelease] autorelease];
} 5.自动释放池
1> 在iOS程序运行过程中,会创建无数个池子。这些池子都是以栈结构存在(先进后出)
2> 当一个对象调用autorelease方法时,会将这个对象放到栈顶的释放池 6.自动释放池的创建方式
1> iOS 5.0前
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; [pool release]; // [pool drain]; 2> iOS 5.0 开始
@autoreleasepool
{ }
*/ #import <Foundation/Foundation.h> @interface Person : NSObject @property (nonatomic, assign) int age; @end #import "Person.h" @implementation Person
- (void)dealloc
{
NSLog(@"Person---dealloc"); [super dealloc];
}
@end #import <Foundation/Foundation.h>
#import "Person.h" int main()
{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; Person *pp = [[[Person alloc] init] autorelease]; [pool release]; // [pool drain]; @autoreleasepool
{ //
Person *p = [[[[Person alloc] init] autorelease] autorelease]; // 0
// [p release];
} return ;
} void test()
{
@autoreleasepool
{// { 开始代表创建了释放池 // autorelease方法会返回对象本身
// 调用完autorelease方法后,对象的计数器不变
// autorelease会将对象放到一个自动释放池中
// 当自动释放池被销毁时,会对池子里面的所有对象做一次release操作
Person *p = [[[Person alloc] init] autorelease]; p.age = ; @autoreleasepool
{
//
Person *p2 = [[[Person alloc] init] autorelease];
p2.age = ; } Person *p3 = [[[Person alloc] init] autorelease]; } // } 结束代表销毁释放池
}

第二部分

 //
// main.m
// 09-autoreleased的应用
//
// Created by apple on 13-8-9.
// Copyright (c) 2013年 itcast. All rights reserved.
//
#import <Foundation/Foundation.h> @interface Person : NSObject @property (nonatomic, assign) int age; + (id)person; + (id)personWithAge:(int)age;
@end #import "Person.h" @implementation Person + (id)person
{
return [[[self alloc] init] autorelease];
} + (id)personWithAge:(int)age
{
Person *p = [self person];
p.age = age;
return p;
} - (void)dealloc
{
NSLog(@"%d岁的人被销毁了", _age); [super dealloc];
}
@end #import "Person.h" @interface GoodPerson : Person @property (nonatomic, assign) int money; @end
#import "GoodPerson.h" @implementation GoodPerson @end #import <Foundation/Foundation.h>
#import "Person.h"
#import "GoodPerson.h" /*
1.系统自带的方法里面没有包含alloc、new、copy,说明返回的对象都是autorelease的 2.开发中经常会提供一些类方法,快速创建一个已经autorelease过的对象
1> 创建对象时不要直接用类名,一般用self
+ (id)person
{
return [[[self alloc] init] autorelease];
}
*/ int main()
{
@autoreleasepool {
Person *p = [Person personWithAge:]; GoodPerson *p2 = [GoodPerson personWithAge:]; p2.money = ;
}
return ;
} void test()
{
Person *p = [[Person alloc] init]; p.age = ; [p release]; // 包
// Student com.mj.test
// Student com.mj.test2 // MJStudent // SBStudent // Next Step @autoreleasepool
{
// Person *p2 = [Person person];
//
// p2.age = 100; Person *p2 = [Person personWithAge:]; // Person *p2 = [[[Person alloc] init] autorelease];
//
// p2.age = 300; NSString *str = @""; NSString *str2 = [NSString stringWithFormat:@"age is %d", ]; NSNumber *num = [[NSNumber alloc] initWithInt:];
[num release]; NSNumber *num2 = [NSNumber numberWithInt:];
}
}

OC MRC之autorelease问题(代码分析)的更多相关文章

  1. Linux内核启动代码分析二之开发板相关驱动程序加载分析

    Linux内核启动代码分析二之开发板相关驱动程序加载分析 1 从linux开始启动的函数start_kernel开始分析,该函数位于linux-2.6.22/init/main.c  start_ke ...

  2. Android代码分析工具lint学习

    1 lint简介 1.1 概述 lint是随Android SDK自带的一个静态代码分析工具.它用来对Android工程的源文件进行检查,找出在正确性.安全.性能.可使用性.可访问性及国际化等方面可能 ...

  3. pmd静态代码分析

    在正式进入测试之前,进行一定的静态代码分析及code review对代码质量及系统提高是有帮助的,以上为数据证明 Pmd 它是一个基于静态规则集的Java源码分析器,它可以识别出潜在的如下问题:– 可 ...

  4. [Asp.net 5] DependencyInjection项目代码分析-目录

    微软DI文章系列如下所示: [Asp.net 5] DependencyInjection项目代码分析 [Asp.net 5] DependencyInjection项目代码分析2-Autofac [ ...

  5. [Asp.net 5] DependencyInjection项目代码分析4-微软的实现(5)(IEnumerable<>补充)

    Asp.net 5的依赖注入注入系列可以参考链接: [Asp.net 5] DependencyInjection项目代码分析-目录 我们在之前讲微软的实现时,对于OpenIEnumerableSer ...

  6. 完整全面的Java资源库(包括构建、操作、代码分析、编译器、数据库、社区等等)

    构建 这里搜集了用来构建应用程序的工具. Apache Maven:Maven使用声明进行构建并进行依赖管理,偏向于使用约定而不是配置进行构建.Maven优于Apache Ant.后者采用了一种过程化 ...

  7. STM32启动代码分析 IAR 比较好

    stm32启动代码分析 (2012-06-12 09:43:31) 转载▼     最近开始使用ST的stm32w108芯片(也是一款zigbee芯片).开始看他的启动代码看的晕晕呼呼呼的. 还好在c ...

  8. 常用 Java 静态代码分析工具的分析与比较

    常用 Java 静态代码分析工具的分析与比较 简介: 本文首先介绍了静态代码分析的基 本概念及主要技术,随后分别介绍了现有 4 种主流 Java 静态代码分析工具 (Checkstyle,FindBu ...

  9. SonarQube-5.6.3 代码分析平台搭建使用

    python代码分析 官网主页: http://docs.sonarqube.org/display/PLUG/Python+Plugin Windows下安装使用: 快速使用: 1.下载jdk ht ...

随机推荐

  1. Django 将数据库查出的 QuerySet 对象转换为 json 字符串

    通过Django查询出MySQL数据库的数据,并将查询出的QuerySet 对象转化成 json 字符串. 写这个例子的作用主要是用来为手机端提供接口用,记录一下,以后 说不准 肯定能用到! ---- ...

  2. 04: 使用BeautifulSoup封装的xss过滤模块

    目录: 1.1 xss攻击简介 1.2 xss攻击解决方法 1.1 xss攻击简介返回顶部 1.简介 1. 跨站脚本(cross site script)为了避免与样式css混淆,所以简称为XSS. ...

  3. apt-get build-dep

    apt-get 里面有个 build-dep参数,手册写着:build-dep causes apt-get to install/remove packages in an attempt to s ...

  4. amin例子的简单研究

    amin这个例子,使用了比较复杂高阶的qml技巧,但是也有局限性.下面分3个部分,分别是界面部分,算法部分和扩展部分,简单地对这个问题进行理解.        由衷感谢:http://amin-ahm ...

  5. Python3基础 type 获得变量的类型

             Python : 3.7.0          OS : Ubuntu 18.04.1 LTS         IDE : PyCharm 2018.2.4       Conda ...

  6. 又一个改写MBR的病毒(TDSS TDL4)

    此毒为TDSS TDL4 的又一个变种.RIS2011 目前尚未收录此毒.此毒的主要行为是改写MBR,并在硬盘尾部的190个扇区内写入病毒代码.病毒的上述动作可穿透还原类软件对系统的保护.我在Acro ...

  7. linux下使用docker-thunder-xware进行离线下载

    1.环境: lsb_release -a hello@jhello:~$ lsb_release -aNo LSB modules are available.Distributor ID: Ubun ...

  8. luoguP2574 XOR的艺术

    思路 01串的区间求和,区间翻转 lazy%2==0 则不用翻转,lazt%2==1则要翻转 模板题 代码 #include <iostream> #include <vector& ...

  9. HDU 1811(并查集+拓扑排序)题解

    Problem Description 自从Lele开发了Rating系统,他的Tetris事业更是如虎添翼,不久他遍把这个游戏推向了全球.为了更好的符合那些爱好者的喜好,Lele又想了一个新点子:他 ...

  10. Linux——进程管理学习简单笔记

    基本概念: 进程和程序的区别 : 1.程序是静态概念,本身作为一种软件资源长期保存:而进程是程序的执行过程,它是动态概念,有一定的生命期,是动态产生和消亡的. 2.程序和进程无一一对应关系.一个程序可 ...